子任务在组内排序



我正在使用芹菜并行化一些长时间运行的作业。实际上,我的分块算法不能保证每个相同的工作子任务。所以我注意到这种意外行为使用组内不平衡的任务。

示例任务:

@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( ->工人 1
  • 步骤(1( ->工人2
  • 步骤(1( ->工人 3

之后,工人 2 和 3 忙了很短的时间(只有 1 秒(,所以他们可以处理最后一个任务,但"步骤(3("只有在"步骤(10("完成后才会处理。

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

谢谢格拉

您看到的是因为芹菜的默认预分叉行为。您可以重写此设置,并在运行辅助角色时使用 -Ofair 标志获取所需的行为。

相关内容

  • 没有找到相关文章