Django在芹菜中的信号

时间:2010-10-13 01:14:08

标签: django django-signals celery

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

1 个答案:

答案 0 :(得分:18)

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

如果您的信号处理程序连接在例如models.py,然后你需要导入它 在tasks.py中确保它也在工作人员中连接。

或者,您可以指定worker应使用的其他模块 CELERY_IMPORTS设置:

CELERY_IMPORTS = ("myapp.handlers", )

或celeryd的-I参数。

$ python manage.py celeryd -I myapp.handlers