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数据结构之二叉树的遍历实例
Apr 29 Python
Python中列表、字典、元组、集合数据结构整理
Nov 20 Python
用Python编写分析Python程序性能的工具的教程
Apr 01 Python
对Python 文件夹遍历和文件查找的实例讲解
Apr 26 Python
python程序控制NAO机器人行走
Apr 29 Python
centos 安装Python3 及对应的pip教程详解
Jun 28 Python
python获取txt文件词向量过程详解
Jul 05 Python
Django-Model数据库操作(增删改查、连表结构)详解
Jul 17 Python
python爬虫豆瓣网的模拟登录实现
Aug 21 Python
python2.7的flask框架之引用js&css等静态文件的实现方法
Aug 22 Python
Django3.0 异步通信初体验(小结)
Dec 04 Python
python实现扫雷游戏
Mar 03 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登陆后跳转到登陆前页面实现思路及代码
2014/01/17 PHP
php之curl设置超时实例
2014/11/03 PHP
PHP 常用时间函数资料整理
2016/10/22 PHP
php微信开发之自定义菜单实现
2016/11/18 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
2017/08/30 PHP
基于Laravel实现的用户动态模块开发
2017/09/21 PHP
使用PHP+MySql+Ajax+jQuery实现省市区三级联动功能示例
2017/09/15 PHP
PHP利用curl发送HTTP请求的实例代码
2020/07/09 PHP
实例:用 JavaScript 来操作字符串(一些字符串函数)
2007/02/15 Javascript
JavaScript为对象原型prototype添加属性的两种方式
2010/08/01 Javascript
window.event快达到全浏览器支持了,以后使用就方便了
2011/11/30 Javascript
解析offsetHeight,clientHeight,scrollHeight之间的区别
2013/11/20 Javascript
值得分享的bootstrap table实例
2016/09/22 Javascript
浅谈jquery选择器 :first与:first-child的区别
2016/11/20 Javascript
Vue中UI组件库之Vuex与虚拟服务器初识
2019/05/07 Javascript
vue实现条件叠加搜索的解决方法
2019/05/28 Javascript
小程序和web画三角形实现解析
2019/09/02 Javascript
通过vue写一个瀑布流插件代码实例
2019/09/07 Javascript
layer.prompt输入层的例子
2019/09/24 Javascript
arcgis.js控制地图地体的显示范围超出区域自动弹回(实现思路)
2021/01/28 Javascript
[01:04:32]DOTA2-DPC中国联赛 正赛 Aster vs LBZS BO3 第二场 2月23日
2021/03/11 DOTA
python通过smpt发送邮件的方法
2015/04/30 Python
基于wxpython开发的简单gui计算器实例
2015/05/30 Python
python实现简单淘宝秒杀功能
2018/05/03 Python
python实现一个简单的udp通信的示例代码
2019/02/01 Python
python中update的基本使用方法详解
2019/07/17 Python
基于python 将列表作为参数传入函数时的测试与理解
2020/06/05 Python
浅谈多卡服务器下隐藏部分 GPU 和 TensorFlow 的显存使用设置
2020/06/30 Python
Django多数据库联用实现方法解析
2020/11/12 Python
python链表类中获取元素实例方法
2021/02/23 Python
投标承诺书范本
2014/03/27 职场文书
大四学生找工作的自荐信
2014/03/27 职场文书
《春晓》教学反思
2014/04/20 职场文书
php中配置文件保存修改操作 如config.php文件的读取修改等操作
2021/05/12 PHP
Python基础之数据类型知识汇总
2021/05/18 Python
python保存图片的四个常用方法
2022/02/28 Python