繁体   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