将n个任务添加到芹菜队列并等待结果

Pry*_*die 23 python django celery django-celery

我会将多个任务添加到芹菜队列并等待结果.我有各种想法如何利用某种形式的共享存储(memcached,redis,db等)实现这一点,但是,我会认为这是Celery可以自动处理但我无法在线找到任何资源的东西.

代码示例

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

    return c.all_results_some_how()
Run Code Online (Sandbox Code Playgroud)

laf*_*ste 35

对于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),
])
Run Code Online (Sandbox Code Playgroud)

在后台启动该组:

result = job.apply_async()
Run Code Online (Sandbox Code Playgroud)

等待:

result.join()
Run Code Online (Sandbox Code Playgroud)

  • 有关`.s()`的信息可以在[celery.Signature` docs,here]中找到(http://docs.celeryproject.org/en/latest/reference/celery.html#celery.Signature) (3认同)

fal*_*tru 15

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]
Run Code Online (Sandbox Code Playgroud)

或者您可以使用ResultSet:

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