Python 芹菜-在另一项任务结束时安排定期任务

Python 芹菜-在另一项任务结束时安排定期任务,python,celery,Python,Celery,我想在另一组任务的末尾动态地安排一个周期性任务 我知道如何使用芹菜创建(静态)定期任务: CELERYBEAT_SCHEDULE = { 'poll_actions': { 'task': 'tasks.poll_actions', 'schedule': timedelta(seconds=5) } } 但是我想从我的任务动态地创建周期性作业(并且可能有一种方法在达到某个条件(所有任务都完成)时停止这些周期性作业) 比如: @c

我想在另一组任务的末尾动态地安排一个周期性任务

我知道如何使用芹菜创建(静态)定期任务:

CELERYBEAT_SCHEDULE = {
      'poll_actions': {
          'task': 'tasks.poll_actions',
          'schedule': timedelta(seconds=5)
      }
}
但是我想从我的任务动态地创建周期性作业(并且可能有一种方法在达到某个条件(所有任务都完成)时停止这些周期性作业)

比如:

@celery.task
def run(ids):
    group(prepare.s(id) for id in ids) | execute.s(ids) | poll.s(ids, schedule=timedelta(seconds=5))

@celery.task
def prepare(id):
    ...

@celery.task
def execute(id):
    ...

@celery.task
def poll(ids):
    # This task has to be schedulable on demand
    ...

这个简单的解决方案要求您能够动态添加/删除beat调度程序条目

这是不可能的。我怀疑它在过渡期间是否可用,因为

您在这里将两个概念混为一谈:“事件驱动工作”的概念和“批量计划驱动工作”的概念(这实际上只是事件按照计划发生的第一种情况)如果你真的认为你在这里做什么,你会发现有一组相当复杂的边缘情况。消息在本质上是分布的,当从不同的消息产生的组开始创建冲突的条目时,当你发现自己在一个预先安排的KrfFT的山下时,你会怎么做? 在使用消息传递系统时,您实际上是在寻找构建递归树的方法。工作轴可以做一些事情并产生更多的消息来做更多的事情。除此之外的循环(有意或无意)最终实现其基本情况并终止

无论您实际想要实现什么,答案都在于在消息传递系统和异步工作框架的限制范围内重新编码您的问题