[英]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()
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.