Python 芹菜@task\u postrun.connect未点火
我的Python 芹菜@task\u postrun.connect未点火,python,django,celery,django-celery,Python,Django,Celery,Django Celery,我的项目/作业应用程序中有一个signals.py。 这是文件: from celery.signals import task_postrun, after_task_publish from project.jobs.models import JobModel, JOB_STATUS_CHOICES @after_task_publish.connect def task_sent_handler(sender=None, headers=None, body=None, **kwarg
项目/作业
应用程序中有一个signals.py
。
这是文件:
from celery.signals import task_postrun, after_task_publish
from project.jobs.models import JobModel, JOB_STATUS_CHOICES
@after_task_publish.connect
def task_sent_handler(sender=None, headers=None, body=None, **kwargs):
info = headers if 'task' in headers else body
print('after_task_publish for task id {info[id]}'.format(info=info,))
@task_postrun.connect
def task_postrun_handler(task_id=None, **kwargs):
print('CONNECT', task_id)
JobModel.objects.filter(task_id=task_id).update(status=JOB_STATUS_CHOICES.SUCCESS)
task\u sent\u handler
被激发,而task\u postrun\u handler
未被激发
signals.py
由我的AppConfig
在ready()
函数中导入
这是我的芹菜配置:
CELERY_BROKER_URL = env('CELERY_BROKER_URL')
CELERY_SEND_EVENTS = True
CELERY_RESULT_BACKEND = env('CELERY_RESULT_BACKEND')
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TASK_SERIALIZER = 'json'
关于为什么不能启动任务\u postrun
的任何建议
它们都是任务类别下的事件,因此我不明白为什么一个有效,另一个无效。配置是正确的,在系统重新启动后,
CONNECT
打印开始显示在芹菜任务日志上。是的,您通常必须确保“手动”连接您的信号。参见,例如,在哪个模块中导入信号?此模块可能仅在发送任务的进程中执行(因此在任务发布后发出信号),而不是在运行任务的进程中执行(发出任务运行后发出信号)。@schwobaseggl我在models.py
中导入信号,然后将其移动到我的芹菜.py
文件中。除了导入之外,我什么都不做。而且,信号是由芹菜发出的,所以我不确定哪种型号加载信号有什么关系。py?已更新问题以删除signals.py
部分