Столкнулся на первый взгляд с неочевидной проблемой:
def subscribe(signal): u""" Подписывает что-то на сигнал. """ def on_signal(**kwargs): u""" Выполняет какую-то обработку сигнала. """ print(kwargs) signal.connect(on_signal)
После подписи на сигнал с помощью subscribe(signal) обработчик on_signal() не выполняется!
А все потому, что по-умолчанию Django-сигналы по-умолчанию устанавливают обработчики через weakref, а при выходе из subscribe() на on_signal() больше не остается ссылок! Поэтому GC сразу чистит его.
Способ исправить ситуацию – отключить weakref:
def subscribe(signal): u""" Подписывает что-то на сигнал. """ def on_signal(**kwargs): u""" Выполняет какую-то обработку сигнала. """ print(kwargs) signal.connect(on_signal, weak=False)