什么可能会延误我的芹菜任务?

时间:2013-05-02 11:34:23

标签: django task celery

小伙子们,

我有一个小问题,也许有人可以帮我弄清楚究竟发生了什么:

我有成千上万的相同任务应该在几毫秒内执行,并且在我重新启动工作人员之后他们实际上在几毫秒内执行,但是在记录了一堆这些任务之后我从芹菜那里得到了一个很大的blob说他们是完成(http://d.pr/n/66h)所有这些都在一个更大的时间框架内完成。之后,每个任务大约需要5到13秒来执行。 这使我计算出芹菜可能在大约一周的执行时间内完成所有任务。 (AAAAAhhhhh)

工人重启后约30-60任务以正常速度执行所以说。 之后我每隔几秒就得到一个结果 - 就像上面提到的有点像4-13s。 当然在某些情况下还有比其他情况更多的事情要做,但这并不能证明0.08s到13s之间的差异!

我目前正在使用redis作为代理(很快将切换到RabbitMQ)并且结果后端和任务本身将一些数据保存到Solr实例,但所有这些连接仍应在毫秒内完成!

我希望能够找出实际延迟所有这些任务的内容。任何人

愉快的 安迪

2 个答案:

答案 0 :(得分:1)

我们在这里遇到了同样的问题。我们通过在django-settings中播放celery-settings解决了这个问题。在降低并发性(到2)并将其重置为原始状态(10)之后,一切正常。 也许试一试。

答案 1 :(得分:0)

经过长时间的斗争,偶尔修复并再次打破它我发现问题是工人本身(和配置 - 我的坏)。 配置说要把结果写到后端,它做得很好,有点50k会导致坐在“垃圾箱”里......并且工人变得反应迟钝了......经过几个小时的摆弄,我得到了我在本地调试工作者的那一点,令我惊讶的是在redis响应方法中被卡住了。

这种'只是'在服务器上花费了大约10秒,但有点像我的拨号连接。所以我在redis响应方法中添加了一个打印,并且看到redis中的所有50k结果键都被流式传输到我的机器上..对于每个执行的任务。

所以这就是为什么一切都没有反应的真正原因。 添加芹菜的设置以停止拧干结果并清除redis后端立即解决了问题。

我仍然想知道为什么redis喜欢请求密钥,尽管它不应该使用em。我没有以任何方式评估结果,否则首先不会有50k左右。 :P

无论如何 - 对于那个把代码放在那里的人 对于所有的鱼来说,这么长而且不是。