我们可以 运行 使用 django canvas 将 2 组并行任务用于 celery 任务吗
can we run 2 group parallel tasks using django canvas for celery tasks
像这样我在 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)()
问题:您在同一个进程中按顺序调用了太多函数(任务),所以如果任何任务(报废新闻数据)被阻塞,所有其他任务将继续等待并可能进入块状态。
解决方案 :更好的设计是延迟 运行 news_event_task 并且每个 news_event_task 如果你想调用 parallel_task 那么两者都可以在同一个过程中完成。所以现在所有任务都将 运行 并行(使用 celery eventlet 来实现)。
另一种方法可以将这些任务发送到队列中(而不是将其顺序保存在内存中),然后一个一个地处理每个 news_event_task。
像这样我在 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)()
问题:您在同一个进程中按顺序调用了太多函数(任务),所以如果任何任务(报废新闻数据)被阻塞,所有其他任务将继续等待并可能进入块状态。
解决方案 :更好的设计是延迟 运行 news_event_task 并且每个 news_event_task 如果你想调用 parallel_task 那么两者都可以在同一个过程中完成。所以现在所有任务都将 运行 并行(使用 celery eventlet 来实现)。
另一种方法可以将这些任务发送到队列中(而不是将其顺序保存在内存中),然后一个一个地处理每个 news_event_task。