我正在创建一个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版
一个常见的错误是像这样启动Flower监视器:
celery flower -b redis://somewhere
而不是这样:
celery -A proj flower
因为前者意味着不会配置花实例具有芹菜配置,然后缺少BROKER_TRANSPORT_OPTIONS
和visibility_timeout
设置。
除此之外,你还必须确保挂钟使用ntp同步,如下面的原始回复中所述。
- kombu是Celery使用的消息库
原始回复:
尽管我还没有听说过这样的事情,但它可能是一个bug。我在kombu/transport/redis.py
中添加了一些print语句,以检查visibility_timeout是否设置正确,这对我来说绝对是正确的。不过,测试它是否能在大于一小时的值下工作需要更多的时间(准确地说,大约需要2小时),这样我就可以返回报告了。
同时,您可以通过自己添加打印语句(例如,到redis传输中的restore_visible方法)来验证您是否正确设置了visibly_timeout
请注意,此功能使用时间戳,因此,如果您有多台机器,则重要的是时钟要非常同步(尤其是不要随时间推移)。您应该始终在网络服务器上使用ntp,并定期同步。