我的工作流程如下,我正在使用带有rabbitMQ的Celery
步骤1.将大文件分成多个部分(让我们说4),然后放入MQ,
第2步。一些工人(让他们说2)将处理这些文件并存储在某个地方。
现在,我的问题是,我还有另外一个任务需要完成,那就是加入那些文件,其中一个是同步任务,即文件的所有部分都应该被处理掉了,所以,我该怎样做才能通过CELERY来制作加入任务取决于第2步。
我是否创建了一个单独的应用程序来连接文件,这些文件可以以某种方式接收这些工作人员的状态,无论他们是否已经完成处理这些文件。
或将文件连接作为MQ中的任务,再次可以(阻止等待)确保所有部件都被处理,然后加入文件,(这也可以由任何工人完成)
哪种方法可以实现? 使这两项任务相互依存
答案 0 :(得分:1)
是的,两个芹菜应用/任务可以相互依赖。
为了实现你的目标,我会使用芹菜画布: http://celery.readthedocs.org/en/latest/userguide/canvas.html 更精确的和弦'
和弦是仅在组中的所有任务完成后执行的任务 执行。
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任务。