【发布时间】:2021-07-24 10:02:55
【问题描述】:
我有一个很长的Celery 任务。超过几分钟。
有时,由于各种原因,一个工人被标记为终止,而另一个工人开始。如果需要更换运行它的机器,或者正在部署新的代码版本,就会发生这种情况。在这种情况下,worker 会收到 SIGTERM 信号。
我想知道任务本身是否可以定期检查此工作人员是否已收到 SIGTERM 并正在等待终止,在这种情况下,只需将任务放回队列中并终止。 (然后该任务将在另一个工作人员上启动,并将继续工作)
编辑:澄清 - 是否可以在任务中检查它是否在等待终止的工作人员上执行。像这样:
# Some long task that can take even a few hours.
def some_task(...):
for i in range(...):
do_some_work()
# That's the missing function:
if did_this_worker_received_SIGTERM_and_waiting_to_be_terminated():
# stop the task in the middle, and it will be executed again later
【问题讨论】:
标签: python celery celery-task