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使用Mechanize模块编写爬虫的要点解析
Mar 31 Python
Python中的字符串查找操作方法总结
Jun 27 Python
python取数作为临时极大值(极小值)的方法
Oct 15 Python
Python计算库numpy进行方差/标准方差/样本标准方差/协方差的计算
Dec 28 Python
Python图像处理之gif动态图的解析与合成操作详解
Dec 30 Python
谈谈Python中的while循环语句
Mar 10 Python
numpy.random模块用法总结
May 27 Python
python从内存地址上加载python对象过程详解
Jan 08 Python
浅谈Python中的模块
Jun 10 Python
PyTorch: Softmax多分类实战操作
Jul 07 Python
Python爬取12306车次信息代码详解
Aug 12 Python
python数字图像处理之对比度与亮度调整示例
Jun 28 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数组函数序列之prev() - 移动数组内部指针到上一个元素的位置,并返回该元素值
2011/10/31 PHP
PHP数组传递是值传递而非引用传递概念纠正
2013/01/31 PHP
php从文件夹随机读取文件的方法
2015/06/01 PHP
php的优点总结 php有哪些优点
2019/07/19 PHP
不错的JS中变量相关的细节分析
2007/08/13 Javascript
javascript 函数使用说明
2010/04/07 Javascript
用JQuery 判断某个属性是否存在hasAttr的解决方法
2013/04/26 Javascript
js简单实现表单中点击按钮动态增加输入框数量的方法
2015/08/18 Javascript
JavaScript实现仿淘宝商品购买数量的增减效果
2016/01/22 Javascript
探讨JavaScript语句的执行过程
2016/01/28 Javascript
利用Angularjs和bootstrap实现购物车功能
2016/08/31 Javascript
浅谈jQuery中的eq()与DOM中element.[]的区别
2016/10/28 Javascript
vue-cli2.x项目优化之引入本地静态库文件的方法
2018/06/19 Javascript
服务端预渲染之Nuxt(使用篇)
2019/04/08 Javascript
一文快速详解前端框架 Vue 最强大的功能
2019/05/21 Javascript
vue3.0中setup使用(两种用法)
2020/12/02 Vue.js
[00:43]DOTA2小紫本全民票选福利PA至宝全方位展示
2014/11/25 DOTA
python统计日志ip访问数的方法
2015/07/06 Python
Pycharm学习教程(7)虚拟机VM的配置教程
2017/05/04 Python
Python 基础教程之闭包的使用方法
2017/09/29 Python
python 提取tuple类型值中json格式的key值方法
2018/12/31 Python
Python3实现的简单三级菜单功能示例
2019/03/12 Python
10 行Python 代码实现 AI 目标检测技术【推荐】
2019/06/14 Python
Django的models中on_delete参数详解
2019/07/16 Python
python实现连连看辅助(图像识别)
2020/03/25 Python
Tensorflow tf.tile()的用法实例分析
2020/05/22 Python
生物化工工艺专业应届生求职信
2013/10/08 职场文书
2013年高中生自我评价
2013/10/23 职场文书
如何写一份好的自荐信
2014/01/02 职场文书
法人授权委托书格式
2014/04/08 职场文书
2014三年级班主任工作总结
2014/12/05 职场文书
关爱留守儿童捐款倡议书
2015/04/27 职场文书
结婚堵门保证书
2015/05/08 职场文书
有关骆驼祥子的读书笔记
2015/06/26 职场文书
退休欢送会主持词
2015/07/01 职场文书
mysql 索引合并的使用
2021/08/30 MySQL