我有一个在Celerybeat实例中运行的任务。当执行该任务时,它有时会修改一个模型对象,该对象应触发post / pre_save信号,但事实并非如此。信号没有发生。我想这是因为Django的信号是同步的,而芹菜在不同的宇宙中的不同线程中的不同服务器上做这件事。是否有一种简单的方法可以让这些信号在芹菜中运行时被点燃?
答案 0 :(得分:18)
Django信号是本地的,这意味着信号处理程序也必须在worker中注册。
如果您的信号处理程序连接在例如models.py
,然后你需要导入它
在tasks.py
中确保它也在工作人员中连接。
或者,您可以指定worker应使用的其他模块
CELERY_IMPORTS
设置:
CELERY_IMPORTS = ("myapp.handlers", )
或celeryd的-I
参数。
$ python manage.py celeryd -I myapp.handlers