簡體   English   中英

python celery - 如何在運行時將 CELERYBEAT_SCHEDULE 任務添加到工作人員?

[英]python celery - how to add CELERYBEAT_SCHEDULE task at runtime to a worker?

我創建了一個 celery worker,它有一個 celerybeat 計划任務,它以 5 秒的時間間隔運行。 如何在不停止的情況下向芹菜工人動態添加另一個節拍任務?

例子

app.conf.update(
   CELERY_TASK_RESULT_EXPIRES=3600,
   CELERY_TIMEZONE = 'UTC',
   CELERYBEAT_SCHEDULE = {
    'long-run-5-secs': {
        'task': 'test_proj.tasks.test',
        'schedule': timedelta(seconds=5),
        'args': (16, )
    }
   }
)

有了上面的配置,我就可以成功運行帶有beat模式的celery worker了。

現在我需要動態添加以下節拍時間表:

'long-run-2-secs': {
    'task': 'test_proj.tasks.test',
    'schedule': timedelta(seconds=2),
    'args': (14, ) },

謝謝

我一直在為同樣的問題尋找解決方案。 我擔心你必須等待 Celery 4.0 版。 目前僅在開發版本中支持動態任務調度: http : //docs.celeryproject.org/en/master/userguide/periodic-tasks.html#beat-entries

一種可能的方法是將任務存儲在數據庫中並動態添加移除任務。 您可以使用數據庫支持的 celery beat 調度程序。 請參閱https://django-celery-beat.readthedocs.io/en/latest/ PeriodicTask 數據庫存儲周期性任務。 您可以使用數據庫命令 (Django ORM) 來操作周期性任務。

這就是我處理動態任務的方式(動態創建和停止任務)。

from django_celery_beat.models import PeriodicTask, IntervalSchedule, CrontabSchedule

chon_schedule = CrontabSchedule.objects.create(minute='40', hour='08', day_of_week='*', day_of_month='*', month_of_year='*') # To create a cron schedule. 
schedule = IntervalSchedule.objects.create(every=10, period=IntervalSchedule.SECONDS) # To create a schedule to run everu 10 min.
PeriodicTask.objects.create(crontab=chon_schedule, name='name_to_identify_task',task='name_of_task') # It creates a entry in the database describing that periodic task (With cron schedule).
task = PeriodicTask.objects.create(interval=schedule, name='run for every 10 min', task='for_each_ten_min', ) # It creates a periodic task with interval schedule

每當您更新 PeriodicTask 時,此表中的計數器也會增加,這會告訴 celery beat 服務從數據庫重新加載計划。

所以你不需要重新啟動或終止節拍。 如果您想在滿足特定條件時停止任務,則

periodic_task = PeriodicTask.objects.get(name='run for every 10 min')
periodic_task.enabled = False
periodic_task.save()

當啟用為 False 時,周期性任務變為空閑。 您可以通過使enable = True再次使其處於活動狀態。

如果您不再需要該任務,則只需刪除該條目即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM