Celery - 粒度任务与消息传递开销

时间:2012-03-29 14:46:15

标签: celery parallel-processing

Celery文档部分Performance and Strategies表明具有多个步骤'应划分为子任务以实现更高效的并行化。然后它提到(当然)会有更多的消息传递开销,因此分成子任务可能不值得花费。

就我而言,我的总体任务是从第三方API检索小图像(150px x 115px),然后通过HTTP上传到我网站的REST API。我可以将其作为单个任务实现,或者分割检索图像的步骤,然后将其上传到两个单独的任务中。如果我执行单独的任务,我认为我必须将图像作为消息的一部分传递给第二个任务。

我的问题是,在这种情况下哪种方法应该更好,我如何衡量性能以确定?

1 个答案:

答案 0 :(得分:0)

由于您的作业受I / O约束,因此划分任务可能会增加可并行执行的操作数。消息传递开销可能很小,因为任何有能力的代理都应该能够处理大量消息/秒,只有几毫秒的延迟。

在您的情况下,上传图片可能需要比下载图片更长的时间。对于单独的任务,下载作业无需等待上载完成(只要有可用的工作人员)。分离的另一个好处是,您可以将每个作业放在不同的队列中,并将更多的工作人员作为备份队列展示自己。

如果我尝试对此进行基准测试,我会比较两种策略中每种策略使用相同数量的工作程序的执行时间。例如,合并任务中的2名工人与分割任务中的2名工人。然后每个人做4个工作,依此类推。我倾向于分开的任务会表现得更快;特别是当工人数量增加时。