首先,请不要将此问题视为此问题的 重复
我有一个使用celery
and redis
asbroker
和result_backend
. 我的问题是如何确保当芹菜工人崩溃时,当芹菜工人备份时,所有计划的任务都被重新尝试。
我已经看到有关使用的建议CELERY_ACKS_LATE = True
,以便代理将重新驱动任务,直到它得到一个 ACK,但在我的情况下它不起作用。每当我安排一项任务时,它都会立即转到工作人员,该工作人员将其持续到预定的执行时间。让我举个例子:
我正在安排这样的任务:res=test_task.apply_async(countdown=600)
,但立即在 celery worker 日志中我可以看到类似 :的内容Got task from broker: test_task[a137c44e-b08e-4569-8677-f84070873fc0] eta:[2013-01-...]
。现在当我杀死芹菜工人时,这些计划任务就会丢失。我的设置:
BROKER_URL = "redis://localhost:6379/0"
CELERY_ALWAYS_EAGER = False
CELERY_RESULT_BACKEND = "redis://localhost:6379/0"
CELERY_ACKS_LATE = True