我有两个不同的django项目,例如projA
和projB
,每个项目都有自己的celery守护进程在不同的队列上运行但是同一个vhost,projA有一个任务taskA
而projB有一个任务taskB
,我尝试从taskB
内部运行taskA
,例如
@task(routing_key='taskA')
def taskA(event_id):
# do some work , then call taskB and wait for result
result = send_task('taskB',routing_key='taskB')
res = result.get(timeout=20)
我可以在projB的日志中看到taskB在一秒内完成,但是taskA继续等待结果并在20秒后超时
对于后端,我有rabbitmq。
答案 0 :(得分:1)
设置结果后端修复了问题
CELERY_RESULT_BACKEND = "amqp"
CELERY_AMQP_TASK_RESULT_EXPIRES = 1000
IMO如果没有设置结果后端result.get应抛出错误或至少记录警告
虽然芹菜2.3确实会抛出错误,如https://github.com/ask/django-celery/issues/66
所述