在我们的开发工作中,时常会有这样的开发需求,如需要定时或者周期性的运行某些程序,因此经常用到一些定时服务,如在 Linux系统中使用 Crond 服务实现程序的定时运行。

Python中也有这样的一个模块,那就是 APScheduler,它是基于Quartz 的一个 Python定时任务框架,实现了 Quartz的全部功能,使用起来十分简单、高效。其提供了基于日期、固定时间间隔以及 Crontab类型的任务,并且支持持久化任务。同时也提供了不同的存储机制,可以方便与数据库等第三方的外部持久化存储进行协同工作。它主要包含了四种组件:

  • Triggers:任务触发器,任务以何种方式触发。
  • Job stores:任务存储器,持久存储任务。
  • Executors:任务执行器,执行任务的模块。
  • Schedulers:任务调度器,通过配置 trigger、job store、executor等实现对任务的增删改查等调度控制。

APScheduler安装

安装过程如下:


任务存储器 Job stores

Job stores 存储被调度的任务,默认的任务存储是简单地把任务保存在内存(MemoryJobStore)中,其他的任务存储形式是将任务保存在数据库中。一个任务的数据将在保存在持久化任务存储时被序列化,在加载时被反序列化。调度器不能分享同一个任务存储。job store支持主流的存储机制:redis、mongodb、内存等等。

MongoDBJobStore为例,实例如下:


执行器 Executors

Executors 处理任务的运行,他们通常通过在任务中提交制定的可调用对象到一个线程或者进城池来进行,当任务完成时,执行器将会通知调度器。


调度器 Schedulers

通常在应用只有一个调度器,调度器提供了处理任务存储、调度器、触发器合适的接口。配置任务存储和执行器可以在调度器中完成,例如添加、修改和移除任务。常用的调度器如下:

  • BlockingScheduler:仅可用在当前你的进程之内,与当前的进行共享计算资源,适合于只在进程中运行单个任务的情况,通常在调度器是你唯一要运行的东西时使用。
  • BackgroundScheduler: 在后台运行调度,不影响当前的系统计算运行,适合于要求任何在程序后台运行的情况,当希望调度器在应用后台执行时使用。
  • AsyncIOScheduler: 如果当前系统中使用了async module,则需要使用异步的调度器,适合于使用asyncio框架的情况。
  • GeventScheduler: 如果使用了 gevent,则需要使用该调度,适合于使用 gevent框架的情况。
  • TornadoScheduler: 如果使用了Tornado, 则使用当前的调度器,适合于使用 Tornado框架的应用。
  • TwistedSchedulerTwister应用的调度器,适合使用Twisted框架的应用。
  • QtScheduler: Qt的调度器,适合使用QT的情况。

触发器种类Triggers

Triggers 包含调度逻辑,每一个任务有它自己的触发器,用于决定接下来哪一个任务运行,根据 Triggers 中定义的时间点,执行频率,时间区间等等参数设置。除了他们自己初始配置以外,触发器完全是无状态的,触发器有如下几种:

  • date:一次性任务,即只执行一次任务。
  • interval:循环任务,即按照时间间隔执行任务。
  • cron:定时任务,即在每个时间段执行任务。

interval 触发器实例

指定触发器为 interval,循环任务,即按照 时间间隔 执行任务。

参数如下

  • year (int|str) :表示四位数的年份,如2019年
  • month (int|str) :表示取值范围为1-12月。
  • day (int|str) :表示取值范围为1-31日。
  • week (int|str) :一年中的第几周 (1-53)。
  • day_of_week (int|str) :表示一周中的第几天(0-6)。
  • hour (int|str):表示取值范围为0-23时。
  • minute (int|str) :表示取值范围为0-59分。
  • second (int|str) :表示取值范围为0-59秒。
  • start_date (datetime|str) :表示开始时间。
  • end_date (datetime|str) :表示结束时间。
  • timezone (datetime.tzinfo|str) :表示时区取值。

如上,我们设定 每2秒执行一次,运行结果如下:


date 触发器实例

指定触发器为 date一次性任务,即只执行一次任务。

如上,我们设定任务 延时五秒 后执行,运行结果如下:


cron 触发器实例

指定触发器为 cron,定时任务,即在每个时间段执行任务

参数如下

  • year (int|str) :表示四位数的年份,如2019年
  • month (int|str) :表示取值范围为1-12月。
  • day (int|str) :表示取值范围为1-31日。
  • week (int|str) :一年中的第几周 (1-53)。
  • day_of_week (int|str) :表示一周中的第几天(0-6)。
  • hour (int|str):表示取值范围为0-23时。
  • minute (int|str) :表示取值范围为0-59分。
  • second (int|str) :表示取值范围为0-59秒。
  • start_date (datetime|str) :表示开始时间。
  • end_date (datetime|str) :表示结束时间。
  • timezone (datetime.tzinfo|str) :表示时区取值。

如上,我们设定在2、4月、7~9月,每天晚上22点21分执行一次任务,运行结果如下:


移除、暂停/恢复任务


如何调度spark程序_如何定时,周期性的运行程序?Python APScheduler实现任务灵活调度...相关推荐

  1. abd shell关闭所有程序_在后台服务器上运行程序

    之前总结过screen的用法,但还可以用nohup命令. nohup工具: Linux系统中有提供一个很好的不挂断地运行命令--nohup.我们使用nohup能很简单的控制使用,在此就简单的介绍一下n ...

  2. 如何调试正在运行的python程序_如何调试作为服务运行的Python程序?

    我有一个python脚本,在控制台中运行时效果很好.但是,在使用pywin32它以使其作为服务运行时,服务将安装并开始正常,但不会生成所需的输出.所以必定会出现问题 - 但我无法看到发现原因的原因. ...

  3. Linux 下后台运行程序,查看和关闭后台运行程序(转载)

    1.运行.sh文件 直接用./sh 文件就可以运行,但是如果想后台运行,即使关闭当前的终端也可以运行的话,需要nohup命令和&命令. (1)&命令 功能:加在一个命令的最后,可以把这 ...

  4. 11无监听程序_腾讯开心鼠英语 小程序实践与总结

    腾讯开心鼠英语 团队中有很多小程序的项目,且后续还会很多小程序的开发和迭代规划,因此我们团队是小程序的重度使用者.在小程序的开发中,团队积累了一些技术和经验,也遇到了一些困难和挑战,还踩了很多坑,因此 ...

  5. 是否要运行此应用程序_使用Delve调试Go应用程序

    调试器 任何编程语言中最简单的调试形式是使用打印语句或日志来写入标准输出.这肯定没有问题,但是当我们的应用程序规模增加并且逻辑变得更加复杂时,这种方式变得极其困难.将打印语句添加到应用程序的每个代码路 ...

  6. plsql developer无监听程序_腾讯开心鼠英语 小程序实践与总结

    腾讯开心鼠英语 团队中有很多小程序的项目,且后续还会很多小程序的开发和迭代规划,因此我们团队是小程序的重度使用者.在小程序的开发中,团队积累了一些技术和经验,也遇到了一些困难和挑战,还踩了很多坑,因此 ...

  7. Python3定时器,定时凌晨两点运行程序

    代码如下 '''定时器,设置凌晨两点运行程序''' import datetimeclass timerf:def __init__(self):pass#定义的测试函数def Run(self):' ...

  8. 渐进式web应用程序_如何使用渐进式Web应用程序更快,更便宜地构建新应用程序...

    渐进式web应用程序 You need an app! The question is- which kind? 您需要一个应用程序! 问题是--哪种? For the last 8 years or ...

  9. 您没有权限来打开应用程序_苹果建议:除非应用程序无响应,否则不要滑动强制退出...

    紫金财经2月26日消息 今日,苹果公司发布的一条建议,成为了微博热搜的话题.苹果建议除非应用程序无响应,否则不要滑动强制退出. 苹果公司表示,滑动关闭iPhone的应用程序可能会缩短电池寿命,并使设备 ...

最新文章

  1. c语言实现将两个文件复制到一个文件里_Python中复制文件的9种方法
  2. Loadrunner的Tuxedo脚本分析,基本流程和基本函数介绍
  3. kubernetes要实现的目标——随机关掉一台机器,看你的服务能否正常;减少的应用实例能否自动迁移并恢复到其他节点;服务能否随着流量进行自动伸缩...
  4. 【转】OpenCV里IplImage数据结构极易出错的问题,IplImage和单字节char*的相互转换
  5. VMware演示手机虚拟化
  6. 【Python】Python中内置的%操作符
  7. SQL/PLUS创建JAVA SOURCE的问题,符号提示输入内容
  8. 每天一点正则表达式积累(三)
  9. btr如何修改服务器手机版我的世界,我的世界btr编辑器
  10. xheditor form java_xhEditor常见问题
  11. 3个方法实现微信多开登陆 适用电脑端(WIN7/WIN10)
  12. go:embed 的使用
  13. c语言中错误c2084,错误_C2084_函数“int multi(int)”已有主体
  14. Gmail邮件客户端pop3和smtp服务器配置
  15. package-lock和package-shrinkwrap
  16. everedit 格式化json_Visual studio code (VS code)
  17. 【tkGo】将Excel里的图片链接替换为图片(Excel嵌入图片)
  18. 关于PEAP认证的过程说明
  19. 网易即时通讯云平台99.99%可靠性的运维经验谈
  20. python读取excel成绩表,并设置柱状图

热门文章

  1. 记录android点滴(一)--通过build.prop实现产品定制的方法
  2. 基于Docker搭建Gitlab代码存储
  3. TabLayout中的Tab.setCustomView左右有空隙,TabLayout下划线间隙设置,下划线长度设置
  4. Android textview 获取url,获取电话号码
  5. Jmeter日志输出和日志级别设置
  6. 加密服务器显示到期,注册加密卡成功了,打开软件还是提示演示到期了,怎么解决?...
  7. Microsoft Team Foundation Server 2010安装指南
  8. linux服务器做301跳转,nginx 实现当找不到文件时实现301跳转
  9. java流的应用_Java中I/O流的应用
  10. 查重多少合格_期刊论文查重一般多少合格?