方法原理介绍先来看一下celery的beat运行过程。上图是beat的主要组成结构,beat中包含了一个service对象,service中包含了一个scheduler对象,scheduler中包含了一个schedule字典,schedule中key对应的的value才是真正的定时任务,是整个beat中最小的单元。service.scheduler默认是celery.beat.PersistentScheduler类的实例对象,而celery.beat.PersistentScheduler其实是celery.beat.Scheduler的子类,所以scheduler.schedule是celery.beat.Scheduler类中的字典,保存的是celery.beat.ScheduleEntry类型的对象。ScheduleEntry的实例对象保存了定时任务的名称、参数、定时信息、过期时间等信息。celery.beat.Scheduler类实现了对schedule的更新方法即update_from_dict方法。主要思路就是让start_scheduler方法中创建的service暴露出来。所以就想到手写一个类去继承Beat,重写start_scheduler()方法。然后在此基础上实现对定时任务的增删改查操作。所以在这里设置成主动开启beat子线程,目的就是为了celery worker启动不重复创建beat线程。

celery实现动态设置定时任务

celery实现动态设置定时任务

celery实现动态设置定时任务

celery实现动态设置定时任务

celery实现动态设置定时任务

celery实现动态设置定时任务

celery实现动态设置定时任务

celery实现动态设置定时任务

celery实现动态设置定时任务

celery实现动态设置定时任务