首页 > 解决方案 > 我们可以使用 django canvas 为 celery 任务运行 2 组并行任务吗

问题描述

像这样我添加到我的 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)()

标签: djangoparallel-processingdjango-celery

解决方案


问题:您在同一进程中按顺序调用了太多函数(任务),因此如果任何任务(抓取新闻数据)被阻塞,所有其他任务将继续等待并可能进入阻塞状态。

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

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


推荐阅读