像这样我在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)()
答案 0 :(得分:1)
问题:您正在同一进程中依次调用太多函数(任务),因此,如果任何任务(捕获新闻数据)被阻止,则其他所有任务将继续等待并可能进入阻止状态。>
解决方案:更好的设计是延迟运行news_event_task,如果要调用parallel_task,则对每个news_event_task都可以在同一过程中完成。因此,现在所有任务将并行运行(使用celery eventlet来实现)。
另一种方法是将这些任务发送到队列中(而不是将其顺序保留在内存中),然后逐个处理每个news_event_task。