你能解释一下我必须使用什么:task_reject_on_worker_lost
或task_acks_late
以及它们有何不同吗? 为什么芹菜在异常后不再次运行任务,当task_acks_late为 True 时?
在芹菜文档中:
即使启用了task_acks_late,当执行任务的工作进程突然退出任务时,工作线程也会确认任务
"突然退出"是什么意思?会提出例外吗?
当 Celery 在True
task_acks_late
和task_reject_on_worker_lost
True
时重试任务时?
如果您希望它在异常后重试,您可以将 args 传递给装饰器。
@app.task(max_retries=10)
def task(*args, **kwargs):
#stuff
突然退出是指工人被杀,而不是例外。如果使用task_acks_late
则工作人员将在任务结束时而不是开始时从队列中删除该项目。但是,如果工作进程被终止,即使任务未完成,仍会确认任务。 如果发生上述事件,task_reject_on_worker_lost
将重新排队邮件,因此您不会丢失任务。
来源: http://docs.celeryproject.org/en/latest/userguide/configuration.html#std:setting-task_reject_on_worker_lost
http://docs.celeryproject.org/en/latest/userguide/configuration.html#task-acks-late
您应该能够同时使用这两个设置,而不会出现问题。