django - 我们可以使用 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)()
解决方案
问题:您在同一进程中按顺序调用了太多函数(任务),因此如果任何任务(抓取新闻数据)被阻塞,所有其他任务将继续等待并可能进入阻塞状态。
解决方案:更好的设计是延迟运行 news_event_task,如果您想调用 parallel_task,则每个 news_event_task 都可以在同一个进程中完成。所以现在所有任务都将并行运行(使用 celery eventlet来实现)。
另一种方法是在队列中发送这些任务(而不是将其序列保存在内存中),然后一个一个地处理每个 news_event_task。
推荐阅读
- arrays - Laravel Eloquent - 使用 JSON 对象数组
- java - 使用 YourKit 通过 HTTP 请求分析 Spring Boot Web App
- phpstorm - Xdebug 在 xdebug_break() 上停止,但在 PHPUnit 运行期间不在 PhpStorm 的断点上
- sql - SQL 直接引用数据
- reactjs - Azure App Service Deploy 未成功部署 Web 应用
- python - 我的 Tkinter 照片已打包,但显示为空白
- dart - On Back Press 按钮回调功能在 Flutter 中不起作用
- android - Dialog 打开时的深色状态栏图标
- server - 与更多刀片共享硬件资源
- alexa - 如何处理失败的技能事件?