在应用开发中有很多情况需要用到任务调度,每日统计平台访问量、清除历史日志、创建月表等任务,还有些功能是需要平台使用人员自己去添加的,比如我要填加明天下午4点的会议提醒,从网上看到的celery中似乎是没有提供这样的API接口去添加任务。
djcelery models.py在djcelery中定义的models可以看到,有PeriodicTask、CrontabSchedule、IntervalSchedule、WorkerState、TaskState,并且在文件中可以看到
signals.pre_delete.connect(PeriodicTasks.changed, sender=PeriodicTask)signals.pre_save.connect(PeriodicTasks.changed, sender=PeriodicTask)
这也是有的博客中提到在数据库 djcelery_periodictask 表中增加任务记录,不能被执行需要重启服务才能触发的原因。
实践在我们的业务代码中引用
from djcelery.models import PeriodicTask, IntervalSchedule, CrontabSchedule
# -*- coding:utf-8 -*-"""Created on 2019/11/18@author: jj"""from djcelery.models import PeriodicTask, IntervalSchedule, CrontabSchedulefrom util.apiview import GomAPIViewclass PeriodicTaskV(GomAPIView): def victim(self): # PeriodicTask(name='测试', # task='bus_arch��Ц,��Цive.tasks.ActualTotalWater', # args='[]', # kwargs='{}', # enabled=1, # interval_id=1, # ).save() PeriodicTask.objects.filter(id=5).delete() class IntervalScheduleV(GomAPIView): """ PERIOD_CHOICES = (('days', _('Days')), ('hours', _('Hours')), ('minutes', _('Minutes')), ('seconds', _('Seconds')), ('microseconds', _('Microseconds'))) """ def victim(self): IntervalSchedule(every=50, period='seconds' ).save()
在不重启服务的情况下,新增的任务是可以正常执行的
执行结果