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 fabric实现远程操作和部署示例
Mar 25 Python
零基础写python爬虫之抓取糗事百科代码分享
Nov 06 Python
Python的Bottle框架中获取制定cookie的教程
Apr 24 Python
python实现图片变亮或者变暗的方法
Jun 01 Python
python开发之字符串string操作方法实例详解
Nov 12 Python
不同版本中Python matplotlib.pyplot.draw()界面绘制异常问题的解决
Sep 24 Python
PyQt5创建一个新窗口的实例
Jun 20 Python
使用python实现离散时间傅里叶变换的方法
Sep 02 Python
python输入一个水仙花数(三位数) 输出百位十位个位实例
May 03 Python
Python预测2020高考分数和录取情况
Jul 08 Python
Django如何实现密码错误报错提醒
Sep 04 Python
Python人工智能之混合高斯模型运动目标检测详解分析
Nov 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文章采集URL补全函数(FormatUrl)
2012/08/02 PHP
php计算程序运行时间的简单例子分享
2014/05/10 PHP
PHP中使用TCPDF生成PDF文档实例
2014/07/01 PHP
php通过rmdir删除目录的简单用法
2015/03/18 PHP
php使用preg_match()函数验证ip地址的方法
2017/01/07 PHP
js 限制数字 js限制输入实现代码
2012/12/04 Javascript
让html页面不缓存js的实现方法
2014/10/31 Javascript
node.js中RPC(远程过程调用)的实现原理介绍
2014/12/05 Javascript
jQuery实现的指纹扫描效果实例(附演示与demo源码下载)
2016/01/26 Javascript
jQuery+PHP+MySQL实现无限级联下拉框效果
2016/02/19 Javascript
jQuery插件ajaxfileupload.js实现上传文件
2020/10/23 Javascript
JQuery ZTree使用方法详解
2017/01/07 Javascript
Jquery实时监听input value的实例
2017/01/26 Javascript
jQuery插件HighCharts实现的2D面积图效果示例【附demo源码下载】
2017/03/15 Javascript
基于Bootstrap的标签页组件及bootstrap-tab使用说明
2017/07/25 Javascript
详解React native全局变量的使用(跨组件的通信)
2017/09/07 Javascript
Vue-cli Eslint在vscode里代码自动格式化的方法
2018/02/23 Javascript
angularJs 表格添加删除修改查询方法
2018/02/27 Javascript
angularjs性能优化的方法
2018/09/05 Javascript
vue-quill-editor富文本编辑器简单使用方法
2018/09/21 Javascript
Vue插件从封装到发布的完整步骤记录
2019/02/28 Javascript
对于防止按钮重复点击的尝试详解
2019/04/22 Javascript
ES6学习笔记之let与const用法实例分析
2020/01/22 Javascript
浅谈Vue使用Elementui修改默认的最快方法
2020/12/05 Vue.js
Python字符串匹配之6种方法的使用详解
2019/04/08 Python
keras.layer.input()用法说明
2020/06/16 Python
美国传奇滑手Paul Rodriguez创办的街头滑板品牌:Primitive Skateboarding
2019/10/29 全球购物
保险公司晨会主持词
2014/03/22 职场文书
公司总经理任命书
2014/06/05 职场文书
大学生社会实践活动总结
2014/07/03 职场文书
普通党员整改措施
2014/10/24 职场文书
2014年单位法制宣传日活动总结
2014/11/01 职场文书
小学科学教学计划
2015/01/21 职场文书
高端收音机+蓝牙音箱,JBL TUNER FM带收音蓝牙音箱评测
2021/04/24 无线电
Oracle设置DB、监听和EM开机启动的方法
2021/04/25 Oracle
MySQL高级进阶sql语句总结大全
2022/03/16 MySQL