gpt4 book ai didi

python - 两个 celery 应用程序可以相互依赖吗?或者一个应用程序的两个任务是相互依赖的?

转载 作者:太空宇宙 更新时间:2023-11-04 06:00:31 27 4
gpt4 key购买 nike

我的工作流程如下,我正在使用 Celery 和 rabbitMQ

第 1 步。将一个大文件分成多个部分(假设为 4 个部分),然后放入 MQ,

第 2 步。一些工作人员(比如说 2 个)将处理这些文件并存储在某个地方。

现在,我的问题是,我还有另一个任务要完成,那就是加入这些文件,这当然是一个同步任务,即文件的所有部分都应该已经处理过,那么,我要通过 CELERY 做什么呢?加入任务取决于步骤 2。

我是否创建一个单独的应用程序来加入文件,它可以以某种方式接收这些工作人员的状态,无论他们是否已完成对这些文件的处理。

或者将文件连接作为 MQ 中的任务,这再次可以(阻塞等待)确保所有部分都得到处理,然后连接文件,(这同样可以由任何工作人员完成)

哪种方法是可行的?使这两个任务相互依存

最佳答案

是的,两个 celery 应用程序/任务可以相互依赖。

为了实现你的目标,我会使用 celery Canvas : http://celery.readthedocs.org/en/latest/userguide/canvas.html更准确地说是“和弦”

A chord is a task that only executes after all of the tasks in a group have finished executing.

from celery import chord

@task
def process_parts(part):
pass

@task
def join_parts(parts)
pass

def split_file(f)
return file_parts_array

def process_file(f):
process_parts = [process_part.s(x) for x in split_file(f)]
join_parts = join_files.s()
result = chord(process_parts)(join_parts)
return result

您将任务 join_parts 映射到特定队列,因此只有存储机器上的工作人员使用 join_files 任务。

关于python - 两个 celery 应用程序可以相互依赖吗?或者一个应用程序的两个任务是相互依赖的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25360910/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com