python - 何时用 Celery Groups 扇出与延迟
问题描述
当我学习芹菜时,试图在这里找出最佳实践。
我想在另一份工作中分散一堆小工作。我知道小组是从一堆排队的较小工作中获得结果的好方法,但是如果我不关心结果怎么办?我只是想把一个大工作分成一堆小任务。在这种情况下,在循环中调用延迟是否相同?
当想要扇出并在父作业中排队一堆较小的作业时,使用组仍然是最佳做法吗?下面以一些伪代码为例。
@app.task
def call_job(job_args):
groups([for small_job.s(x) for x in job_args]).delay()
@app.task
def small_job(x):
# do something
对比
@app.task
def call_job(job_args):
for x in job_args:
small_job.delay(x)
@app.task
def small_job(x):
# do something
解决方案
我认为你应该采用第二种方法(for
循环):
group
当您想知道所有较小的任务都已完成时使用(因为您想一起查看它们的结果)。group
仅在所有任务完成后才应该发生另一个动作/任务时使用(和弦)。
在幕后,有人(Celery 后端)需要负责管理已完成的任务,以便它可以回答组结果是否为ready()
.
最重要的是,如果您不关心任务的返回值,并且在完成所有任务和后续操作之间没有依赖关系 - 请使用for
循环。
推荐阅读
- amazon-web-services - 有条件地更新集合属性并跟踪其中的元素数量 DynamoDB Node.js
- jquery - 如何选择数据表 1.9 中当前页面中显示的行?
- windows-10 - 更新到 Windows 10 1903 后指纹传感器不工作。(Dell G3 3579)
- java - google cloud vision api OCR 边界框
- selenium-webdriver - 为什么我得到以下代码的 NullPointerException
- java - Spring Batch:使用自定义批量大小将列表写入数据库表
- java - eclipse在调试时不反编译rt.jar,但是idea可以
- git - 如何恢复大型提交拉动?
- http - jmeter的多数据集登录场景的多用户不起作用
- c# - 如何在 ckfinder 或 ckeditor 中集成 cloudinary 媒体库小部件