python - 使用任务创建 celery 管道,仅在前一个任务中的某些项目堆叠时运行
问题描述
我正在尝试为我的应用程序创建某种管道。我有一个问题 - 应用程序的主要目标是读取视频,拍摄每第 N 个视频,并将其放入管道中。管道内部有 5 个不同的任务,例如:
1. Crop image
2. Store image in the array. if array length = IMAGES_NEEDED_FOR_TASK3, launch task 3
3. Apply some transforms to image, make one big image from IMAGES_NEEDED_FOR_TASK3,.
4. Stack transformed images in the array. if array length = IMAGES_NEEDED_FOR_TASK5, launch task 5
5. Write info about income images from task 4 to database
我在执行任务 2 和 4 时遇到了困难,因为它们有条件。如果他们没有条件,我会使用链式方法。我考虑过从任务 2 调用任务 3(我想为每个任务创建一个不同的队列),但我读到这被认为是不好的做法。先感谢您
解决方案
很难用 Celery 工作流程来表达这一点(如果这是你正在努力解决的问题),所以我建议你编写任务 4,这样当堆栈有 IMAGES_NEEDED_FOR_TASK5 图像时,它只是将任务 #5 排队(只需调用 app .send_task() 或 app.apply_async())。
任务 #2 也是如此。只要不需要处理任务 3 和 5 的结果就可以了,这种情况下逻辑会变得更复杂。如果 Celery 有一个原语可以更容易地表达这样的情况,那就太好了。
如果您仍然坚持使用 Celery 工作流程,那么您或许应该重新考虑逻辑,并利用Chunk 原语。在这种情况下,您的任务 #2 将add.chunks()
. 任务 #5 也是如此。
推荐阅读
- podman - 以非 root 身份运行容器,以便容器“root”不会映射到正在运行的用户
- 2sxc - 实施基本内容管理器权限的最佳方式
- javascript - 如何在 JavaScript 中导入它?
- vue.js - 如何将输入字段动态添加到表单
- kubernetes - Istio 已部署但未显示在 GKE UI 中
- javascript - 一些图像未在 iOS 设备/模拟器 Ionic v1 上加载,但在浏览器中运行良好
- intellij-idea - Inellij 显示意图操作在 Flutter 中停止工作
- npm - npm install gulp-cli 失败 - 503 服务不可用
- javascript - 路由参数更改时刷新组件
- angular - 从子组件更新 ng-template