Python 如何从特定的django信号接收器获得结果?

Python 如何从特定的django信号接收器获得结果?,python,django,signals,django-signals,Python,Django,Signals,Django Signals,我发现了这个问题,但没有找到任何好的答案: 我的问题是: 在send_signals_和get_transition_status()函数中,我发送了2个信号,但如果第一个信号接收器的check_if_server_connected()响应为False,我不想执行另一个信号。我如何从这个特定的接收者那里得到响应?我在django文档中找不到它 我无法得到这样的响应[0][1],因为响应列表中的结果顺序可能不同 信号。py: waiting_for_auto_connect_task = Sig

我发现了这个问题,但没有找到任何好的答案:

我的问题是:

在send_signals_和get_transition_status()函数中,我发送了2个信号,但如果第一个信号接收器的check_if_server_connected()响应为False,我不想执行另一个信号。我如何从这个特定的接收者那里得到响应?我在django文档中找不到它

我无法得到这样的响应[0][1],因为响应列表中的结果顺序可能不同

信号。py:

waiting_for_auto_connect_task = Signal(providing_args=["server_id"])

waiting_for_server_success_tasks = Signal(providing_args=["server_id"])
def send_signals_and_get_transition_status(server_id):

    response = wait_for_auto_connect_task.send(sender=None, server_id=server_id)

    logger.debug('First signal response: {}'.format(response))

    # Get results from the receiver check_if_server_connected() response
    # If response it True only then send another signal

        response = waiting_for_server_success_tasks.send(sender=None, server_id=server_id)

    # else:
        raise CouldNotConnectToTheServerException()


@receiver(wait_for_auto_connect_task)
def check_if_server_connected(sender, **kwargs):
    server_id = kwargs["server_id"]

    # ...

    results = check_if_server_connected_task.apply_async((server_id,))
    return results.get()


@receiver(wait_for_auto_connect_task)
def check_if_all_services_are_ready(sender, **kwargs):
    server_id = kwargs["server_id"]

    # ...

    return are_services_ready(server_id)
\uuuu init\uuuuu.py:

waiting_for_auto_connect_task = Signal(providing_args=["server_id"])

waiting_for_server_success_tasks = Signal(providing_args=["server_id"])
def send_signals_and_get_transition_status(server_id):

    response = wait_for_auto_connect_task.send(sender=None, server_id=server_id)

    logger.debug('First signal response: {}'.format(response))

    # Get results from the receiver check_if_server_connected() response
    # If response it True only then send another signal

        response = waiting_for_server_success_tasks.send(sender=None, server_id=server_id)

    # else:
        raise CouldNotConnectToTheServerException()


@receiver(wait_for_auto_connect_task)
def check_if_server_connected(sender, **kwargs):
    server_id = kwargs["server_id"]

    # ...

    results = check_if_server_connected_task.apply_async((server_id,))
    return results.get()


@receiver(wait_for_auto_connect_task)
def check_if_all_services_are_ready(sender, **kwargs):
    server_id = kwargs["server_id"]

    # ...

    return are_services_ready(server_id)
第一信号响应:

[(<function check_if_server_connected at 0x6875de8>, False), (<function check_if_all_services_are_ready at 0x6875e60>, True)]
[(假),(真)]

我想我是自己想出来的。不确定这是否是最好的解决方案,但我制作了一个函数,可以得到结果:

def get_results_from_signal_receiver(response, receiver_function_name):
    for i in response:
        if i[0].__name__ == receiver_function_name:
            return i[1]
    return None