簡體   English   中英

將n個任務添加到芹菜隊列並等待結果

[英]Add n tasks to celery queue and wait for the results

我會將多個任務添加到芹菜隊列並等待結果。 我有各種想法如何利用某種形式的共享存儲(memcached,redis,db等)實現這一點,但是,我會認為這是Celery可以自動處理但我無法在線找到任何資源的東西。

代碼示例

def do_tasks(b):
    for a in b:
        c.delay(a)

    return c.all_results_some_how()

對於Celery> = 3.0不推薦使用 TaskSet以支持group

from celery import group
from tasks import add

job = group([
             add.s(2, 2),
             add.s(4, 4),
             add.s(8, 8),
             add.s(16, 16),
             add.s(32, 32),
])

在后台啟動該組:

result = job.apply_async()

等待:

result.join()

Task.delay返回AsyncResult 使用AsyncResult.get獲取每個任務的結果。

為此,您需要保留對任務的引用。

def do_tasks(b):
    tasks = []
    for a in b:
        tasks.append(c.delay(a))
    return [t.get() for t in tasks]

或者您可以使用ResultSet

更新 :不推薦使用ResultSet ,請參閱@laffuste的回答

def do_tasks(b):
    rs = ResultSet([])
    for a in b:
        rs.add(c.delay(a))
    return rs.get()

我有一個預感,你不是真的想要延遲,而是Celery的異步功能。

我想你真的想要一個TaskSet

from celery.task.sets import TaskSet
from someapp.tasks import sometask

def do_tasks(b):
    job = TaskSet([sometask.subtask((a,)) for a in b])
    result = job.apply_async()
    # might want to handle result.successful() == False
    return result.join()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM