Disconnect the receiver `func` from the signal, identified by
    `signal_id`.

    Args:
        signal: The signal identifier.
        receiver: The callable receiver to disconnect.

    Returns:
        True if the receiver was successfully disconnected. False otherwise.

def disconnect(signal, receiver):
    """Disconnect the receiver `func` from the signal, identified by
    `signal_id`.

    Args:
        signal: The signal identifier.
        receiver: The callable receiver to disconnect.

    Returns:
        True if the receiver was successfully disconnected. False otherwise.
    """
    inputkey = __make_id(receiver)

    with __lock:
        __purge()
        receivers = __receivers.get(signal)

        for idx in six.moves.range(len(receivers)):
            connected = receivers[idx]()

            if inputkey != __make_id(connected):
                continue

            del receivers[idx]
            return True  # receiver successfully disconnected!

    return False