如何在celery 中禁用任务的重新传递(使用redis)?

vawmfj5a  于 2021-06-10  发布在  Redis
关注(0)|答案(1)|浏览(412)

我是否可以将celery 配置为在工人非正常停机的情况下丢弃任务?对我来说,更关键的是任务不重复,而不是总是被交付。
如文件所述:
如果在可见性超时内未确认某个任务,则该任务将重新传递给另一个工作进程并执行。
这会导致eta/倒计时/重试任务出现问题,执行时间超过可见性超时;事实上,如果发生这种情况,它将再次执行,并在一个循环中再次执行。
因此,您必须增加可见性超时,以匹配您计划使用的最长eta的时间。
我的用例是使用 visibility_timeout 一天,但在某些情况下,这还不够-我想在未来进一步安排任务。”“电源故障”或任何其他导致非正常关机的事件是非常罕见的,我可以接受任务被丢弃的情况,比如说,0.01%的情况。而且,一个任务比它应该执行的时间晚了一天,这和该任务根本没有运行一样糟糕。
一个很明显的方法就是 visibility_timeout 到100年。有更好的办法吗?

pxq42qpu

pxq42qpu1#

有一个 acks_late 配置,但默认值为 false (因此,请确保您没有启用它):
如果工作进程(由于某种原因)在执行过程中崩溃,需要再次执行任务时,将使用acks\u late设置。需要注意的是,不知道worker是否崩溃,如果崩溃了,通常是一个不可恢复的错误,需要人工干预(worker中的bug或任务代码)。
(引自此处)
定义 task_acks_late (似乎名称在某些不匹配的最新版本中已更改)可以在此处找到。

相关问题