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协程相关概念
Jan 20 Python
Django rest framework工具包简单用法示例
Jul 20 Python
python实现淘宝秒杀脚本
Jun 23 Python
python Django中models进行模糊查询的示例
Jul 18 Python
python支付宝支付示例详解
Aug 22 Python
python使用Matplotlib改变坐标轴的默认位置
Oct 18 Python
python opencv将表格图片按照表格框线分割和识别
Oct 30 Python
wxPython实现绘图小例子
Nov 19 Python
Python使用re模块验证危险字符
May 21 Python
解决python3输入的坑——input()
Dec 05 Python
MoviePy简介及Python视频剪辑自动化
Dec 18 Python
Python尝试实现蒙特卡罗模拟期权定价
Apr 21 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批量生成随机用户名
2008/07/10 PHP
Smarty模板引擎缓存机制详解
2016/05/23 PHP
php实现的debug log日志操作类实例
2016/07/12 PHP
PHP Oauth授权和本地加密实现方法
2016/08/12 PHP
PHP中Cookie的使用详解(简单易懂)
2017/04/28 PHP
javascript中日期转换成时间戳的小例子
2013/03/21 Javascript
判断一个对象是否为jquery对象的方法
2014/03/12 Javascript
javascript实现的HashMap类代码
2014/06/27 Javascript
jQuery弹出层插件Lightbox_me使用指南
2015/04/21 Javascript
XML文件转化成NSData对象的方法
2015/08/12 Javascript
JS 终止执行的实现方法
2016/11/24 Javascript
利用Query+bootstrap和js两种方式实现日期选择器
2017/01/10 Javascript
基于cookie实现zTree树刷新后展开状态不变
2017/02/28 Javascript
JS实现验证码倒计时的注册页面
2018/01/02 Javascript
Angular5升级RxJS到5.5.3报错:EmptyError: no elements in sequence的解决方法
2018/04/09 Javascript
JavaScript面向对象继承原理与实现方法分析
2018/08/09 Javascript
vue项目接口管理,所有接口都在apis文件夹中统一管理操作
2020/08/13 Javascript
vue3.0 加载json的方法(非ajax)
2020/10/26 Javascript
Python自然语言处理之词干,词形与最大匹配算法代码详解
2017/11/16 Python
python+VTK环境搭建及第一个简单程序代码
2017/12/13 Python
django 发送邮件和缓存的实现代码
2018/07/18 Python
使用Python OpenCV为CNN增加图像样本的实现
2019/06/10 Python
Python socket模块ftp传输文件过程解析
2019/11/05 Python
Python decimal模块使用方法详解
2020/06/08 Python
使用Python将语音转换为文本的方法
2020/08/10 Python
如何创建一个Flask项目并进行简单配置
2020/11/18 Python
世界上最好的帽子:Tilley
2016/11/27 全球购物
社区健康教育工作方案
2014/06/03 职场文书
党员民主生活会个人整改措施材料
2014/09/16 职场文书
学校开除通知书
2015/04/25 职场文书
2015年保管员工作总结
2015/04/30 职场文书
2016年10月份红领巾广播稿
2015/12/21 职场文书
2019数学教师下学期工作总结
2019/06/27 职场文书
如何写一份具有法律效力的借款协议书?
2019/07/02 职场文书
go语言中http超时引发的事故解决
2021/06/02 Golang
IDEA2021.2配置docker如何将springboot项目打成镜像一键发布部署
2021/09/25 Java/Android