Python定时任务APScheduler安装及使用解析


Posted in Python onAugust 07, 2020

1、简介

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

2、APScheduler四个组件

APScheduler 四个组件分别为:触发器(trigger),作业存储(job store),执行器(executor),调度器(scheduler)。

触发器(trigger)

包含调度逻辑,每一个作业有它自己的触发器,用于决定接下来哪一个作业会运行。除了他们自己初始配置意外,触发器完全是无状态的

APScheduler 有三种内建的 trigger:

  • date: 特定的时间点触发
  • interval: 固定时间间隔触发
  • cron: 在特定时间周期性地触发

作业存储(job store)

存储被调度的作业,默认的作业存储是简单地把作业保存在内存中,其他的作业存储是将作业保存在数据库中。一个作业的数据讲在保存在持久化作业存储时被序列化,并在加载时被反序列化。调度器不能分享同一个作业存储。
APScheduler 默认使用 MemoryJobStore,可以修改使用 DB 存储方案

执行器(executor)

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

最常用的 executor 有两种:

  • ProcessPoolExecutor
  • ThreadPoolExecutor

调度器(scheduler)

通常在应用中只有一个调度器,应用的开发者通常不会直接处理作业存储、调度器和触发器,相反,调度器提供了处理这些的合适的接口。配置作业存储和执行器可以在调度器中完成,例如添加、修改和移除作业

2、安装

$ pip install apscheduler

接下来我们看下简单的几个示例:

===============interval: 固定时间间隔触发===============
from apscheduler.schedulers.blocking import BlockingScheduler
from datetime import datetime

def job():
  print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
# 定义BlockingScheduler
sched = BlockingScheduler()
sched.add_job(job, 'interval', seconds=5) 
sched.start()
===============cron: 特定时间周期性地触发===============
import time
from apscheduler.schedulers.blocking import BlockingScheduler

def job(text):
  t = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
  print('{} --- {}'.format(text, t))

scheduler = BlockingScheduler()
# 在每天22点,每隔 1分钟 运行一次 job 方法
scheduler.add_job(job, 'cron', hour=17, minute='*/1', args=['job1'])
# 在每天22和23点的25分,运行一次 job 方法
scheduler.add_job(job, 'cron', hour='22-23', minute='25', args=['job2'])

scheduler.start()

通过装饰器scheduled_job()添加方法

import time
from apscheduler.schedulers.blocking import BlockingScheduler

scheduler = BlockingScheduler()

@scheduler.scheduled_job('interval', seconds=5)
def job1():
  t = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
  print('job1 --- {}'.format(t))

@scheduler.scheduled_job('cron', second='*/7')
def job2():
  t = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
  print('job2 --- {}'.format(t))

scheduler.start()

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

Python 相关文章推荐
python求素数示例分享
Feb 16 Python
从零学python系列之数据处理编程实例(一)
May 22 Python
Python基础入门之seed()方法的使用
May 15 Python
python 制作自定义包并安装到系统目录的方法
Oct 27 Python
搞清楚 Python traceback的具体使用方法
May 13 Python
Python为何不能用可变对象作为默认参数的值
Jul 01 Python
pytorch 实现删除tensor中的指定行列
Jan 13 Python
python 实现在无序数组中找到中位数方法
Mar 03 Python
解决python DataFrame 打印结果不换行问题
Apr 09 Python
一篇文章搞懂python的转义字符及用法
Sep 03 Python
DRF使用simple JWT身份验证的实现
Jan 14 Python
python实现b站直播自动发送弹幕功能
Feb 20 Python
Python如何解除一个装饰器
Aug 07 #Python
解决Pycharm双击图标启动不了的问题(JetBrains全家桶通用)
Aug 07 #Python
Python实现上下文管理器的方法
Aug 07 #Python
Python 读取位于包中的数据文件
Aug 07 #Python
Python如何绘制日历图和热力图
Aug 07 #Python
Pycharm2020.1安装无法启动问题即设置中文插件的方法
Aug 07 #Python
手把手教你如何用Pycharm2020.1.1配置远程连接的详细步骤
Aug 07 #Python
You might like
PHP SQLite类
2009/05/07 PHP
php 字符过滤类,用于过滤各类用户输入的数据
2009/05/27 PHP
php htmlspecialchars加强版
2010/02/16 PHP
深入mysql_fetch_row()与mysql_fetch_array()的区别详解
2013/06/05 PHP
php权重计算方法代码分享
2014/01/09 PHP
yii实现创建验证码实例解析
2014/07/31 PHP
PHP中overload与override的区别
2017/02/13 PHP
[原创]PHP实现SQL语句格式化功能的方法
2017/07/28 PHP
Avengerls vs KG BO3 第三场2.18
2021/03/10 DOTA
JQuery 常用操作代码
2010/03/14 Javascript
jquery select下拉框操作的一些说明
2010/04/02 Javascript
javascript 触发HTML元素绑定的函数
2010/09/11 Javascript
获取select元素被选中的文本内容的js代码
2014/01/29 Javascript
js判断是否按下了Shift键的方法
2015/01/27 Javascript
javascript实现的右下角弹窗实例
2015/04/24 Javascript
jQuery实现的指纹扫描效果实例(附演示与demo源码下载)
2016/01/26 Javascript
node网页分段渲染详解
2016/09/05 Javascript
微信小程序 教程之引用
2016/10/18 Javascript
从零学习node.js之利用express搭建简易论坛(七)
2017/02/25 Javascript
JavaScript寄生组合式继承原理与用法分析
2019/01/11 Javascript
原生JavaScript实现拖动校验功能
2020/09/29 Javascript
python获取本机所有IP地址的方法
2018/12/26 Python
使用Python控制摄像头拍照并发邮件
2019/04/23 Python
Python 实现文件读写、坐标寻址、查找替换功能
2019/09/11 Python
Python调用Windows命令打印文件
2020/02/07 Python
Html5 Geolocation获取地理位置信息实例
2016/12/09 HTML / CSS
小程序瀑布流解决左右两边高度差距过大的问题
2019/02/20 HTML / CSS
美国在线印刷公司:PsPrint
2017/10/12 全球购物
一套.net面试题及答案
2016/11/02 面试题
小学生读书感言
2014/02/12 职场文书
如何写自我评价?自我评价写什么好?
2014/03/14 职场文书
小学安全工作汇报材料
2014/08/19 职场文书
《中国梦我的梦》小学生演讲稿
2014/08/20 职场文书
商家认证委托书格式
2014/10/16 职场文书
2014年移动公司工作总结
2014/12/08 职场文书
2015年餐厅服务员工作总结
2015/04/23 职场文书