2013-03-17 1 views
2

Мне интересно, выполняются ли методы слушателя, отвечающие на сигналы Django, последовательно или одновременно. По существу, это:Django: Приемники сигналов работают одновременно?

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

Different чем это:

for object_instance in object_instance_list: 
    object_instance.method() 

редактировать: Сделано синтаксический поправку к коду

ответ

0

Вы могли бы просто прочитать код FWIW - Django является открытым исходным кодом. Но в любом случае:

  1. сигналы приемников называются последовательно
  2. в вашем втором фрагменте вы не вызова object_instance.method - вам нужно добавить скобки (и в конечном итоге передать соответствующие аргументы - в этом случае, по крайней мере отправителя), чтобы фактически вызвать метод.

Короче говоря: сигналы в основном используются для обеспечения свободного соединения между приложениями. Если вы хотите выполнить параллельное выполнение, вам нужно либо использовать потоки, либо подпроцессы (которые могут быть небезопасными в зависимости от среды исполнения) или пойти на что-то вроде сельдерея.

+0

Спасибо! Это было решение, к которому я тоже пришел. Когда я исследовал код метода send(), я обнаружил, что Django буквально просто для циклов по приемникам последовательно. Кажется, что сельдерей является решением для параллельного выполнения, в частности, подзадачных групп. – flimsy

Смежные вопросы