我们可以使用django canvas执行2组并行任务来执行芹菜任务吗?

时间:2018-10-23 12:23:41

标签: django parallel-processing django-celery

像这样我在celery.py中添加

@app.task(bind=True)
def execute_analysis(id_=1):
    task1 = group(news_event_task.si(i) for i in range(10))
    task2 = group(parallel_task.si(i) for i in range(10))
 return chain(task1, task2)()

1 个答案:

答案 0 :(得分:1)

问题:您正在同一进程中依次调用太多函数(任务),因此,如果任何任务(捕获新闻数据)被阻止,则其他所有任务将继续等待并可能进入阻止状态。

解决方案:更好的设计是延迟运行news_event_task,如果要调用parallel_task,则对每个news_event_task都可以在同一过程中完成。因此,现在所有任务将并行运行(使用celery eventlet来实现)。

另一种方法是将这些任务发送到队列中(而不是将其顺序保留在内存中),然后逐个处理每个news_event_task。