当达到eta时,具有长eta(8+小时)的芹菜任务被连续执行多次



我正在创建一个eta在3到20小时之间的任务,当我查看工作者日志时,对于该任务,工作者在收到原始任务后每小时说一次"Got task from broker: ...",直到达到eta。

我知道这与设置BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': X}有关,其中X是以秒为单位的数字。

所以我玩了visibility_timeout,如果我将其设置为小于1小时,那么我可以看到工人每X秒得到一个相同的任务,然而,当我将visibility_timeout设置为大于1小时的X时,无论我设置的时间如何,它都会默认为1小时。

还有其他人遇到这个问题吗?这是一个已知的bug吗?

我用的是芹菜3.0.11(Chiastic Slide)带有Redis服务器2.4.15版

编辑:任何使用kombu*连接到相同Redis URL的消息使用者将有助于恢复未回复的邮件,因此您必须确保所有邮件被配置为具有相同的CCD_ 4值。

一个常见的错误是像这样启动Flower监视器:

celery flower -b redis://somewhere

而不是这样:

celery -A proj flower

因为前者意味着不会配置花实例具有芹菜配置,然后缺少BROKER_TRANSPORT_OPTIONSvisibility_timeout设置。

除此之外,你还必须确保挂钟使用ntp同步,如下面的原始回复中所述。

  • kombu是Celery使用的消息库

原始回复

尽管我还没有听说过这样的事情,但它可能是一个bug。我在kombu/transport/redis.py中添加了一些print语句,以检查visibility_timeout是否设置正确,这对我来说绝对是正确的。不过,测试它是否能在大于一小时的值下工作需要更多的时间(准确地说,大约需要2小时),这样我就可以返回报告了。

同时,您可以通过自己添加打印语句(例如,到redis传输中的restore_visible方法)来验证您是否正确设置了visibly_timeout

请注意,此功能使用时间戳,因此,如果您有多台机器,则重要的是时钟要非常同步(尤其是不要随时间推移)。您应该始终在网络服务器上使用ntp,并定期同步。

相关内容

  • 没有找到相关文章

最新更新