【问题标题】:Are chained celery tasks guaranteed to run on the same node worker?是否保证链式 celery 任务在同一个节点工作程序上运行?
【发布时间】:2018-11-11 13:12:59
【问题描述】:

是否保证链式 celery 任务在同一个节点 worker 上运行?

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

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

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

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

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

【问题讨论】:

    标签: python django rabbitmq celery


    【解决方案1】:

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

    【讨论】:

    • 谢谢,这也是我的想法,我可以通过在 python 中动态链接它们来将 plot_results 和 sent_to_s3 任务组合在一起,然后最终将其作为任务调用。
    猜你喜欢
    • 2017-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-07
    • 1970-01-01
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    相关资源
    最近更新 更多