一种可能的方法是将任务存储在数据库中并动态添加或删除任务。您可以使用数据库支持的芹菜节拍调度程序进行相同的操作。参考
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
每当您更新周期时,也会请求此表中的计数器
递增,这告诉芹菜跳动服务重新加载
所以你不需要重新开始或停止跳动。
periodic_task = PeriodicTask.objects.get(name='run for every 10 min')
periodic_task.enabled = False
periodic_task.save()
如果enabled为False,则周期性任务将变为空闲。您可以通过使
enable = True
创建项目模型对象时,也要创建周期性任务。只需根据您的场景创建cron计划或间隔计划。然后创建
PeriodicTask
Project.name
到
名称(以便您可以轻松地将项目对象与
对象。就这样,从那一刻起,任务就由芹菜打理了。
如果要动态禁用或启用周期性任务,只需在
周期任务
如下
task = PeriodicTask.objects.get(name='task_name')
task.enabled = False
task.save()