芹菜 - 子任务在一个组内排序

时间:2016-02-01 09:34:51

标签: python celery

我使用芹菜来并行化一些长期工作。 实际上我的分块算法不能保证每个算法的工作相同 子任务。所以我注意到了这种意想不到的行为 组内的不平衡任务。

示例任务:

@app.task(name='step')
def step(s):
   print 'step received:', s
   time.sleep(s)
   return s

在这种情况下:

%time group(step.s(10), step.s(1), step.s(1), step.s(3))
CPU times: user 32.2 ms, sys: 33.6 ms, total: 65.8 ms
Wall time: <b>13.6 s</b>
Out[5]: [10, 1, 1, 3]

我认为1,1,3,10的组合不能超过10秒(加上任务的时间很短)。

我注意到这个电话:

  • 步骤(10) - &gt;工人1
  • 步骤(1) - &gt;工人2
  • 步骤(1) - &gt;工人3

之后,工作人员2和3忙于短时间(仅1秒),因此他们可以完成最后一项任务,但是&#34;步骤(3)&#34;只会在&#34;步骤(10)&#34;之后处理结束了。

这听起来很奇怪。 有什么建议吗?

谢谢 Gla结构

1 个答案:

答案 0 :(得分:1)

您所看到的是因为芹菜的默认prefork行为。您可以在运行worker时使用-Ofair标志覆盖此操作并获得所需的行为。