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



Celery文档的"性能和策略"部分建议将具有多个"步骤"的任务划分为子任务,以实现更高效的并行化。然后它提到(当然)会有更多的消息传递开销,因此划分为子任务可能不值得花费这些开销。

在我的情况下,我的总体任务是从第三方API检索一个小图像(150px x 115px),然后通过HTTP上传到我的网站的REST API。我可以将其作为一个单独的任务来实现,也可以将检索图像然后上传到两个独立的任务中。如果我进行单独的任务,我想我将不得不将图像作为消息的一部分传递给第二个任务。

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

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

在您的情况下,上传图像可能需要比下载更长的时间。对于单独的任务,下载作业不必等待上传完成(只要有可用的工作人员)。分离的另一个优点是,您可以将每个作业放在不同的队列中,并随着备份队列的出现而投入更多的工作人员。

若我尝试对此进行基准测试,我会使用相同数量的工作人员来比较这两种策略的执行时间。例如,组合任务中有2名工作人员,而分开任务中有两名工作人员。然后每个人做4个工人,以此类推。我倾向于分开的任务会更快;尤其是当工人数量增加时。

相关内容

  • 没有找到相关文章