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实现根据ip地址反向查找主机名称的方法
Apr 29 Python
Python实现更改图片尺寸大小的方法(基于Pillow包)
Sep 19 Python
Python 'takes exactly 1 argument (2 given)' Python error
Dec 13 Python
python实现浪漫的烟花秀
Jan 30 Python
Django ORM多对多查询方法(自定义第三张表&ManyToManyField)
Aug 09 Python
在Python中获取操作系统的进程信息
Aug 27 Python
基于Django统计博客文章阅读量
Oct 29 Python
python Qt5实现窗体跟踪鼠标移动
Dec 13 Python
python如何使用socketserver模块实现并发聊天
Dec 14 Python
PyQt5高级界面控件之QTableWidget的具体使用方法
Feb 23 Python
python numpy中multiply与*及matul 的区别说明
May 26 Python
Pytorch distributed 多卡并行载入模型操作
Jun 05 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 静态变量与自定义常量的使用方法
2010/01/26 PHP
详解WordPress开发中get_header()获取头部函数的用法
2016/01/08 PHP
用 Javascript 验证表单(form)中的单选(radio)值
2009/09/08 Javascript
jquery中dom操作和事件的实例学习 下拉框应用
2011/12/01 Javascript
javascript设置金额样式转换保留两位小数示例代码
2013/12/04 Javascript
node.js中的fs.writeFile方法使用说明
2014/12/14 Javascript
NodeJS Web应用监听sock文件实例
2015/02/18 NodeJs
JavaScript实现带缓冲效果的随屏滚动漂浮广告代码
2015/11/06 Javascript
jQuery实现漂亮实用的商品图片tips提示框效果(无图片箭头+阴影)
2016/04/16 Javascript
原生js实现弹出层登录拖拽功能
2016/12/05 Javascript
js中setTimeout的妙用--防止循环超时
2017/03/06 Javascript
jquery animate动画持续运动的实例
2017/11/29 jQuery
jQuery+ajax读取json数据并按照价格排序示例
2018/03/28 jQuery
JS简单实现动态添加HTML标记的方法示例
2018/04/08 Javascript
vue2 设置router-view默认路径的实例
2018/09/20 Javascript
手淘flexible.js框架使用和源代码讲解小结
2018/10/15 Javascript
解决layer图标icon不加载的问题
2019/09/04 Javascript
javascript实现摄像头拍照预览
2019/09/30 Javascript
[56:18]VGJ.S vs Secret 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python发腾讯微博代码分享
2014/01/10 Python
python递归查询菜单并转换成json实例
2017/03/27 Python
用tensorflow构建线性回归模型的示例代码
2018/03/05 Python
Python程序打包工具py2exe和PyInstaller详解
2019/06/28 Python
python 多进程共享全局变量之Manager()详解
2019/08/15 Python
python datetime中strptime用法详解
2019/08/29 Python
基于Python实现签到脚本过程解析
2019/10/25 Python
Python Selenium操作Cookie的实例方法
2021/02/28 Python
如何向接受结构参数的函数传入常数值
2016/02/17 面试题
几个常见的软件测试问题
2016/09/07 面试题
元宵节主持词
2014/03/25 职场文书
银行青年文明号事迹材料
2014/05/31 职场文书
党员民主评议个人总结
2014/10/20 职场文书
春节慰问信范文
2015/02/15 职场文书
幼儿园工作总结2015
2015/04/01 职场文书
Python 制作自动化翻译工具
2021/04/25 Python
python opencv通过4坐标剪裁图片
2021/06/05 Python