6

我想知道响应 Django 信号的侦听器方法是顺序执行还是同时执行。本质上是这样的:

for object_instance in object_instance_list:
    custom_signal.connect(object_instance.method)
custom_signal.send(self)

与此不同:

for object_instance in object_instance_list:
    object_instance.method()

编辑:对代码进行语法更正

4

1 回答 1

2

您可能已经阅读了 FWIW 代码 - Django 是开源的。但无论如何:

  1. 信号接收器被顺序调用
  2. 在您的第二个片段中,您没有调用 object_instance.method - 您需要添加括号(并最终传递相关参数 - 在这种情况下至少是发送者)才能实际调用该方法。

长话短说:信号主要用于允许应用程序之间的松散耦合。如果你想要并发执行,你要么必须使用线程或子进程(这可能不安全,具体取决于执行环境),或者选择像 celery 这样的东西。

于 2013-03-18T15:08:00.953 回答