我有一个小脚本,可以将任务排入队列进行处理。该脚本进行大量数据库查询以获取应排队的项目。我面临的问题是,芹菜工人一旦被脚本排队就开始接收任务。这是正确的,这也是 celery 应该工作的方式,但这通常会导致我的脚本和 celery worker 之间出现死锁。
有没有一种方法可以将脚本中的所有任务排入队列,但延迟执行直到脚本完成或直到固定的时间延迟?
我在 celery 或 django-celery 的文档中找不到这个。这可能吗?
目前,作为快速修复,我考虑过将所有要处理的项目添加到列表中,当我的脚本执行完所有查询后,我可以简单地遍历列表并将任务排入队列。也许这可以解决问题,但是当您有数千个项目要排队时,这可能不是一个好主意。
原文由 Mridang Agarwalla 发布,翻译遵循 CC BY-SA 4.0 许可协议
eta/countdown 选项可以延迟任务执行:
https://docs.celeryq.dev/en/stable/userguide/calling.html#eta-and-countdown