Django和Celery中的并发任务

时间:2014-08-11 06:56:01

标签: python django celery eventlet

我有一个复杂的场景我需要解决。

我使用Celery并行运行任务,我的任务涉及HTTP请求,我计划将Celery与eventlet一起用于此目的。

让我解释一下我的情景:

我有两个可以并行运行的任务,第三个任务需要处理这两个任务的输出,因此我使用Celery组来运行2个任务,而Celery链则通过 输出到第三个任务,以便在完成时对其进行处理。

现在它变得复杂了,第三个任务需要产生我想要并行运行的多个任务,我想收集所有输出并在另一个任务中处理它。

所以我为多个任务创建了一个组以及一个链来处理所有信息。

我想我错过了关于Celery并发原语的基本信息,我有一个很好的芹菜任务,但我需要让它更快。

这是代码的简化示例:

@app.task
def task2():
       return "aaaa"

@app.task
def task3():
       return "bbbb"

@app.task
def task4():
    work = group(...) | task5.s(...)                                                          
    work()

@app.task
def task1():   
        tasks = [task2.s(a, b), task3.s(c, d)]
    work = group(tasks) | task4.s()
    return work()

这是我开始此操作的方式:

    task = tasks1.apply_async(kwargs=kwargs, queue='queue1')

我保存task.id并每隔30秒拉一次服务器,看看是否有可用的结果:

results = tasks1.AsyncResult(task_id)
if results.ready():
     res = results.get()

0 个答案:

没有答案