我有一个设置,我在 AWS 现场实例上运行长时间的幂等任务,但我无法弄清楚如何设置 Celery 以优雅地处理在任务中被杀死的工人。
目前,如果一个工作人员被杀死,则该任务被标记为失败(WorkerLostError)。我发现有关该主题的文档有点精简,但它建议您应该在这种情况下使用 CELERY_ACKS_LATE。这对我不起作用,该任务仍被标记为失败。
当我有 CELERY_ACKS_LATE=False 时,任务只是停留在 PENDING 状态——所以至少现在我可以说它失败了——这是一个好的开始。
这是我目前的配置设置:
# I'm using rabbit-mq as the broker
BROKER_HEARTBEAT = 10
CELERY_ACKS_LATE = True
CELERYD_PREFETCH_MULTIPLIER = 1
CELERY_TRACK_STARTED = True
我有一个在主服务器上旋转的任务,它检查未完成任务的结果并处理更新我的本地数据库以将任务标记为完成(并使用结果执行工作)。在这个阶段,我认为我将不得不捕捉“工人过早退出:信号 15 (SIGTERM)”场景并重试该任务。
感觉这一切都应该由 celery 处理,所以我觉得我错过了配置中的一些基本内容。
给定幂等任务和将失败的工人,配置 celery 以使这些任务由不同的工人接手的最佳方法是什么?