首页 > 解决方案 > 是否保证链式 celery 任务在同一个节点工作程序上运行?

问题描述

是否保证链式 celery 任务在同一个节点工作程序上运行?

我知道我可以为专用任务建立一个队列,但是我的任务链涉及创建需要发送到 S3 的 png 文件。png 文件的创建是链中的一项不同任务,因此如果它们在不同的工作人员中运行,下一个任务可能找不到 png 文件。

我不想为它建立一个单独的队列,因为否则我需要运行该特定队列中的所有任务,而别处。

 result = (process_diode.s() | plot_results.s() | send_to_s3.s()).apply_async()

在上面的代码中,如果plot_results任务和send_to_s3任务在不同的工作人员中运行,则不能保证 png 文件会存在。

保证链中的所有任务都在同一个工作节点上运行对我来说已经足够了。是这样吗?

标签: pythondjangorabbitmqcelery

解决方案


不,绝对没有这样的保证。这里有两个解决方案:要么编写一个同时完成所有三件事的任务,要么使用共享文件系统来存储文件。


推荐阅读