use*_*317 15 redis celery celery-task
我正在创建一个eta范围在3到20小时之间的任务,当我查看工作日志时,对于此任务,工作人员说" Got task from broker: ..."在收到原始任务之后每小时都会到达eta.
我知道这与设置BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': X}X是以秒为单位的数字有关.
所以我玩了visibility_timeout,如果我把它设置为不到1小时的任何时间,那么我可以看到工作者每X秒获得相同的任务,但是当我将visibility_timeoutX 设置为大于1小时时,它会保持默认为1h而不管我设定的时间.
还有其他人遇到过这个问题吗?这是一个知道错误吗?
我正在使用Redis服务器版本2.4.15的Celery 3.0.11(Chiastic Slide)
编辑:任何使用kombu*连接到同一Redis URL的消息使用者将有助于恢复未打包的消息,因此您必须确保所有消息都配置了相同的visibility_timeout值.
一个常见的错误是像这样启动Flower监视器:
celery flower -b redis://somewhere
而不是像这样:
celery -A proj flower
因为前者意味着花卉实例不会配置芹菜配置,然后丢失BROKER_TRANSPORT_OPTIONS和visibility_timeout设置.
除此之外,您还必须使用ntp确保挂钟同步,如下面的原始回复中所述.
原始回复:
虽然我没有听说过这样的事情,但它可能是一个错误.我添加了一些打印语句来kombu/transport/redis.py检查visibility_timeout是否设置正确,这对我来说绝对是.测试它使用超过一小时的值将需要更多的时间(准确地说大约2个小时),所以我可以报告.  
同时您可以通过自己添加print语句来验证您是否正确设置了visiblity_timeout(例如,在redis传输中的restore_visible方法)
请注意,此功能正在使用时间戳,因此如果您有多台计算机,则时钟几乎同步非常重要(特别是不要按小时漂移).您应该始终在联网服务器上使用ntp并定期进行同步.
| 归档时间: | 
 | 
| 查看次数: | 1642 次 | 
| 最近记录: |