这两天因为项目需要用到任务调度,调研了一下认为APScheduler 是比较适合的。没有celery那么重,也能覆盖大部分的需求,可以持久化任务,也可以添加删除任务,因此选用了APScheduler。
根据官方文档,整理了一下心得。
启动
1.一旦启动了scheduler,你就不再能对scheduler的配置进行修改。
添加任务
1.如果你的任务是持久化的,那么你一定要给job设置ID,并且在add_job()时使用replace_existing=True,否则在你每次应用重启的时候将会得到一个新的job副本。如果你设置了ID,却没有使用replace_existing=True ,那么会造成,当添加重复ID的任务时,程序报错。
2.如果想要立即启动任务,可以在add_job()时提交trigger参数
删除任务
1.两种删除任务的方法中,推荐根据id删除。scheduler.remove_job('my_job_id')
暂停、重启任务
1. 获取job实例。使用pause()
2. 获取job实例。使用resume()
想要在Flask中使用APScheduler,结果发现无法使用,查找了大量资料发现官方资料中已做出说明,
官方说Flask-APScheduler也许有用也许没用。也是很调皮了。
使用了一下,发现很好用,如果碰到多模块、使用数据库问题,看这篇https://blog.csdn.net/arnolan/article/details/84936075
Flask-APScheduler 还直接提供API,只要在配置文件里面配置SCHEDULER_API_ENABLED =True 就行
API如下:
self._add_url_route('get_scheduler_info', '', api.get_scheduler_info, 'GET')
self._add_url_route('add_job', '/jobs', api.add_job, 'POST')
self._add_url_route('get_job', '/jobs/<job_id>', api.get_job, 'GET')
self._add_url_route('get_jobs', '/jobs', api.get_jobs, 'GET')
self._add_url_route('delete_job', '/jobs/<job_id>', api.delete_job, 'DELETE')
self._add_url_route('update_job', '/jobs/<job_id>', api.update_job, 'PATCH')
self._add_url_route('pause_job', '/jobs/<job_id>/pause', api.pause_job, 'POST')
self._add_url_route('resume_job', '/jobs/<job_id>/resume', api.resume_job, 'POST')
self._add_url_route('run_job', '/jobs/<job_id>/run', api.run_job, 'POST')
需要加上默认的前缀 /schedule,当然修改也是可以的,配置文件里面配置SCHEDULER_API_PREFIX ='/your_path' 就行
网友评论