如何推迟执行 Celery 任务?

新手上路,请多包涵

我有一个小脚本,可以将任务排入队列进行处理。该脚本进行大量数据库查询以获取应排队的项目。我面临的问题是,芹菜工人一旦被脚本排队就开始接收任务。这是正确的,这也是 celery 应该工作的方式,但这通常会导致我的脚本和 celery worker 之间出现死锁。

有没有一种方法可以将脚本中的所有任务排入队列,但延迟执行直到脚本完成或直到固定的时间延迟?

我在 celery 或 django-celery 的文档中找不到这个。这可能吗?

目前,作为快速修复,我考虑过将所有要处理的项目添加到列表中,当我的脚本执行完所有查询后,我可以简单地遍历列表并将任务排入队列。也许这可以解决问题,但是当您有数千个项目要排队时,这可能不是一个好主意。

原文由 Mridang Agarwalla 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 824
2 个回答

我认为您正在尝试避免自己脚本的竞争条件,而不是要求一种延迟任务运行的方法。

然后您可以创建一个任务,并在该任务中使用 .apply() 调用您的每个任务,而不是 .apply_async() 或 .delay()。以便这些任务顺序运行

原文由 Yefei 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题