编程语言
首页 > 编程语言> > python – Celery一遍又一遍地重新运行长时间运行的完成任务

python – Celery一遍又一遍地重新运行长时间运行的完成任务

作者:互联网

我有一个python celery-redis队列处理上传和下载一次值得演出和数据.

很少上传需要几个小时.然而,一旦这样的任务完成,我正在目睹这种奇怪的芹菜行为,芹菜调度员再次通过再次发送给工人重新运行刚刚结束的任务(我正在运行一个单独的工人)并且它刚刚发生了2次任务!

有人可以帮助我知道为什么会发生这种情况,我该如何预防呢?

这些任务肯定是干净利落地完成的,没有任何错误报告只是这些是非常长时间运行的任务.

解决方法:

我最近遇到了这个问题,最终发现任务是
由于组合而多次运行
task prefetching和任务超过了
visibility timeout.任务在执行之前得到确认(除非你设置ACKS_LATE = True),
默认情况下,每个进程预取4个任务.第一项任务将是
在执行之前确认,但如果执行需要一个多小时,那么
其他预取的任务将被传递给另一个工作人员
再执行一次(或者在你的情况下,
由同一个工人执行额外的时间).

您可以通过将可见性超时增加到比任务的最长运行时间更长的时间来解决:

BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': 3600*10}  # 10 hours

您还可以设置PREFETCH_MULTIPLIER = 1以禁用预取,以便长时间运行的任务不会保留
其他任务得不到承认.

标签:python,celery,celery-task
来源: https://codeday.me/bug/20190830/1767016.html