2017-06-01 75 views
0

我已创建任务在芹菜Python中,一个任务的输出并行处理任务

@app.task 
def mainTask(msg,nc): 
    decryptFunction.decryptFunc(msg) 
    if len(decryptFunction.messageJson): 

我异步接收数据。

def on_message(client, userdata, msg): 
    result = mainTask.delay(msg.payload.decode("utf-8"),1) 

我需要使用输出decryptFunction.messageJson在5个任务,并同时运行

+0

你的意思是你想'decryptFunction.messageJson'被用在5个独立的任务中,但是仍然希望'mainTask'运行而不停止? –

+0

是的,这是要求 – Jos

回答

0

我从你的需求理解是什么,我会建议而不是使mainTask,因为异步可以调用其他5个任务作为celery任务,从mainTask

def mainTask(msg, nc): 
    decryptFunction.decryptFunc(msg) 
    if len(decryptFunction.messageJson): 
     response1 = task1.delay(decryptFunction.messageJson) 
     response2 = task2.delay(decryptFunction.messageJson) 
     response3 = task3.delay(decryptFunction.messageJson) 
     response4 = task4.delay(decryptFunction.messageJson) 
     response5 = task5.delay(decryptFunction.messageJson) 

和你on_message功能:

def on_message(client, userdata, msg): 
    result = mainTask(msg.payload.decode("utf-8"),1) 

但是这是假设你的其他5个任务是互斥的,并且对其中一个的响应不影响另一个任务,因为如果他们不是,你不能使他们成为异步任务。

但是,如果你的mainTask是耗时的,你可以使用它作为Celery任务。

+0

是明智的使用芹菜组并行处理任务1至5 – Jos

+0

我用它在我的一些项目中,一直工作到现在。 –