[英]Celery - Schedule periodic task at the end of another task
我想在另一組任務結束時動態安排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
...
一個簡單的解決方案要求您能夠即時添加/刪除節拍調度程序條目。 截至該問題的答案...
如何向Celery動態添加/刪除定期任務(celerybeat)
這是不可能的。 我懷疑它是否可以在過渡時期使用,因為...
您在這里混淆了兩個概念。 “事件驅動工作”的概念和“批處理進度驅動的工作”的想法( 實際上只是事件按計划發生的第一種情況 )。 如果您真正考慮在這里做什么,將會發現存在相當復雜的邊緣情況。 從本質上講,消息是分布式的,當從不同消息派生的組開始創建沖突條目時會發生什么? 當您發現自己在預先安排的克魯夫山下時會做什么?
使用消息傳遞系統時,您實際上是在構建遞歸樹。 做某事並產生更多消息以做更多事情的工作主軸。 除了這些周期外,這些周期最終會達到其基本情況並終止。
實際要實現的目標的答案就在於在消息傳遞系統和異步工作框架的限制范圍內重新編碼問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.