10

我有一个在 Celerybeat 实例中运行的任务。执行该任务时,它有时会修改模型对象,该对象应触发 post/pre_save 信号,但事实并非如此。信号没有发生。我想这是由于 Django 的信号是同步的,而 celery 在不同宇宙的不同线程中的不同服务器上执行它。有没有一种简单的方法可以在芹菜中运行这些信号时仍然触发它们?

4

1 回答 1

20

Django 信号是本地的,这意味着信号处理程序也必须在 worker 中注册。

如果您的信号处理程序连接到 eg models.py,那么您需要将其导入tasks.py以确保它也连接到工作程序中。

或者,您可以使用以下设置指定工作人员应导入的其他模块CELERY_IMPORTS

CELERY_IMPORTS = ("myapp.handlers", )

-I对 celeryd 的论证。

$ python manage.py celeryd -I myapp.handlers
于 2010-10-14T08:00:55.310 回答