Python任务调度模块APScheduler使用


Posted in Python onApril 15, 2020

APScheduler是一个Python定时任务框架,使用起来十分方便。提供了基于日期、固定时间间隔以及crontab类型的任务,并且可以持久化任务、并以daemon方式运行应用。

在APScheduler中有四个组件:

  • 触发器(trigger)包含调度逻辑,每一个作业有它自己的触发器,用于决定接下来哪一个作业会运行。除了他们自己初始配置意外,触发器完全是无状态的。简单说就是应该说明一个任务应该在什么时候执行。
  • 作业存储(job store)存储被调度的作业,默认的作业存储是简单地把作业保存在内存中,其他的作业存储是将作业保存在数据库中。一个作业的数据将在保存在持久化作业存储时被序列化,并在加载时被反序列化。调度器不能分享同一个作业存储。
  • 执行器(executor)处理作业的运行,他们通常通过在作业中提交制定的可调用对象到一个线程或者进城池来进行。当作业完成时,执行器将会通知调度器。
  • 调度器(scheduler)任务控制器:通过配置executor、jobstore、trigger,使用线程池(ThreadPoolExecutor默认值20)或进程池(ProcessPoolExecutor 默认值5)并且默认最多3个(max_instances)任务实例同时运行,实现对job的增删改查等调度控制

你需要选择合适的调度器,这取决于你的应用环境和你使用APScheduler的目的。通常最常用的两个:

BlockingScheduler:当调度器是你应用中唯一要运行的东西时使用。

BackgroundScheduler:当你不运行任何其他框架时使用,并希望调度器在你应用的后台执行。

作业存储

支持4中作业存储,分别是:MemoryJobStore(存储在内存中)、sqlalchemy(关系型数据库)、mongodb(文档数据库)、redis(内存型键值对数据库)

触发方式

date:固定日期触发器:任务只运行一次,运行完毕自动清除;若错过指定运行时间,任务不会被创建

interval:时间间隔触发器,每个一定时间间隔执行一次。

cron:cron风格的任务触发。

Python任务调度模块APScheduler使用

Python任务调度模块APScheduler使用

作业操作

1. 添加作业:上面是通过add_job()来添加作业,另外还有一种方式是通过scheduled_job()修饰器来修饰函数。

@sched.scheduled_job('cron', id='my_job_id', day='last sun')

def some_decorated_task():

print("I am printed at 00:00:00 on the last Sunday of every month!")

2. 移除作业

job = scheduler.add_job(myfunc,'interval', minutes=2)

job.remove()

Same,using an explicit job ID:

scheduler.add_job(myfunc,'interval', minutes=2, id='my_job_id')

scheduler.remove_job('my_job_id')

3. 暂停和恢复作业

暂停作业:

?apscheduler.job.Job.pause()

?apscheduler.schedulers.base.BaseScheduler.pause_job()

恢复作业:

?apscheduler.job.Job.resume()

?apscheduler.schedulers.base.BaseScheduler.resume_job()

4. 获得job列表

获得调度作业的列表,可以使用get_jobs()来完成,它会返回所有的job实例。或者使用print_jobs()来输出所有格式化的作业列表。

5. 修改作业

def some_decorated_task():

print("I am printed at 00:00:00 on the last Sunday of every month!")

6. 关闭调度器

默认情况下调度器会等待所有正在运行的作业完成后,关闭所有的调度器和作业存储。如果你不想等待,可以将wait选项设置为False。

scheduler.shutdown()

scheduler.shutdown(wait=False)

作业运行的控制

add_job的第二个参数是trigger,它管理着作业的调度方式。它可以为date, interval或者cron。对于不同的trigger,对应的参数也相同。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python模块之time模块(实例讲解)
Sep 13 Python
tensorflow saver 保存和恢复指定 tensor的实例讲解
Jul 26 Python
解决PyCharm控制台输出乱码的问题
Jan 16 Python
python实现得到当前登录用户信息的方法
Jun 21 Python
python交互模式下输入换行/输入多行命令的方法
Jul 02 Python
PyCharm 2019.3发布增加了新功能一览
Dec 08 Python
详解从Django Allauth中进行登录改造小结
Dec 18 Python
pytorch实现建立自己的数据集(以mnist为例)
Jan 18 Python
使用TensorFlow对图像进行随机旋转的实现示例
Jan 20 Python
python实现npy格式文件转换为txt文件操作
Jul 01 Python
Matlab如何实现矩阵复制扩充
Jun 02 Python
python 爬取哔哩哔哩up主信息和投稿视频
Jun 07 Python
Python实现代码块儿折叠
Apr 15 #Python
Python类中的装饰器在当前类中的声明与调用详解
Apr 15 #Python
如何提高python 中for循环的效率
Apr 15 #Python
ipython jupyter notebook中显示图像和数学公式实例
Apr 15 #Python
解决 jupyter notebook 回车换两行问题
Apr 15 #Python
Python使用monkey.patch_all()解决协程阻塞问题
Apr 15 #Python
使用python处理题库表格并转化为word形式的实现
Apr 14 #Python
You might like
php变量与数组相互转换的方法(extract与compact)
2016/12/02 PHP
如何利用预加载优化Laravel Model查询详解
2017/08/11 PHP
php swoft框架实例用法
2020/12/22 PHP
Jquery上传插件 uploadify v3.1使用说明
2012/06/18 Javascript
使用apply方法处理数组的三个技巧[译]
2012/09/20 Javascript
jquery定时滑出可最小化的底部提示层特效代码
2013/10/02 Javascript
js实现飞入星星特效代码
2014/10/17 Javascript
Jquery实现仿腾讯娱乐频道焦点图(幻灯片)特效
2015/03/06 Javascript
asp.net中oracle 存储过程(图文)
2015/08/12 Javascript
JS实现样式清新的横排下拉菜单效果
2015/10/09 Javascript
浏览器兼容的JS写法总结
2016/04/27 Javascript
jQuery图片轮播(二)利用构造函数和原型创建对象以实现继承
2016/12/06 Javascript
关于javascript事件响应的基础语法总结(必看篇)
2016/12/26 Javascript
Flask中获取小程序Request数据的两种方法
2017/05/12 Javascript
Vue自定义过滤器格式化数字三位加一逗号实现代码
2018/03/23 Javascript
基于vue2.0的活动倒计时组件countdown(附源码下载)
2018/10/09 Javascript
javascript+css实现进度条效果
2020/03/25 Javascript
[01:19:33]DOTA2-DPC中国联赛 正赛 iG vs VG BO3 第一场 2月2日
2021/03/11 DOTA
python实现的系统实用log类实例
2015/06/30 Python
Python实现的十进制小数与二进制小数相互转换功能
2017/10/12 Python
python脚本当作Linux中的服务启动实现方法
2019/06/28 Python
python3调用windows dos命令的例子
2019/08/14 Python
python rsync服务器之间文件夹同步脚本
2019/08/29 Python
Numpy之reshape()使用详解
2019/12/26 Python
使用TensorFlow搭建一个全连接神经网络教程
2020/02/06 Python
jenkins+python自动化测试持续集成教程
2020/05/12 Python
Python logging模块原理解析及应用
2020/08/13 Python
html5 Canvas实现图片旋转的示例
2018/01/15 HTML / CSS
递归计算如下递归函数的值(斐波拉契)
2012/02/04 面试题
最新远光软件笔试题面试题内容
2013/11/08 面试题
简单的JAVA编程面试题
2013/03/19 面试题
python+selenium小米商城红米K40手机自动抢购的示例代码
2021/03/24 Python
高中生学习生活的自我评价
2013/11/27 职场文书
2014年预备党员群众路线教育实践活动对照检查材料思想汇报
2014/10/02 职场文书
龙潭大峡谷导游词
2015/02/10 职场文书
办公室主任岗位竞聘书
2015/09/15 职场文书