別のタスクグループの終わりにCeleryを使って周期的なタスクを動的にスケジュールします。Celery - 別のタスクの最後に定期的なタスクをスケジュールします。
私はセロリと(静的)定期的なタスクを作成する方法を知っている:
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
...