gpt4 book ai didi

redis - 如果 celery worker 死得很惨,工作会重试吗?

转载 作者:IT王子 更新时间:2023-10-29 06:11:06 26 4
gpt4 key购买 nike

如果工作人员运行的服务器死机,是否有重试 celery 作业的方法?我不只是指执行作业的子进程,而是整个服务器变得不可用。

我尝试使用 RabbitMQ 和 Redis 作为代理。在这两种情况下,如果当前正在处理作业,则它会被完全遗忘。当一个 worker 重新启动时,它甚至不会尝试重新处理作业,看看 Rabbit 或 Redis,它们的队列是空的。结果后端也是空的。

看起来 worker 捕获了消息并假设如果子进程失败它会把它放回去,但如果 worker 也死了,它就不能把它放回去。

(是的,我工作的环境每年都会发生不止一次这样的事情,我不想失去任务)

最佳答案

理论上,设置 task_acks_late=True 应该可以解决问题。 ( doc )

使用 Redis 代理,任务将在 visibility_timeout 后重新交付,默认为一小时。 ( doc )

使用 RabbitMQ,一旦 Rabbit 注意到工作人员死亡,任务就会重新交付。

关于redis - 如果 celery worker 死得很惨,工作会重试吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41577723/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com