有没有办法根据条件延迟Celery任务的运行?在它从预定状态转为活动状态之前,我想快速检查我的机器是否可以根据提供的参数和我当时的机器状态运行任务。如果不是,则暂停预定队列并等待条件满足。
我已经环顾了以下几点,但似乎没有削减它:
- Celery's Signals:我能得到的最接近的是task_prerun(),但无论我放在那里,任务都会运行,并且不会停止其他计划任务的运行。还有worker_ready()但是这并没有考虑即将进行的任务的检查参数。
- Database Lock(也是here):我可以让每个任务开始正常运行,然后在任务开始运行时进行检查,但是如果我设置了一个周期性的间隔来检查如果满足条件,则会丢失活动队列的顺序,因为可以在任何时候满足条件,并且许多活动任务之一将能够继续。这是数据库锁定的用武之地,也是迄今为止最可行的解决方案。每次检查时我都可以锁定,如果条件不满足,它会保持锁定状态。当条件最终满足时,我释放队列中下一个项目的锁定,保留队列的原始顺序。
我觉得令人惊讶的是芹菜没有这个功能来指定是否/何时可以运行预定队列中的下一个项目。