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进阶教程之函数参数的多种传递方法
Aug 30 Python
Ubuntu 14.04+Django 1.7.1+Nginx+uwsgi部署教程
Nov 18 Python
Python入门之三角函数sin()函数实例详解
Nov 08 Python
神经网络python源码分享
Dec 15 Python
python如何重载模块实例解析
Jan 25 Python
Python输出由1,2,3,4组成的互不相同且无重复的三位数
Feb 01 Python
Python使用pyserial进行串口通信的实例
Jul 02 Python
python3 打印输出字典中特定的某个key的方法示例
Jul 06 Python
Python中的几种矩阵乘法(小结)
Jul 10 Python
vue学习笔记之动态组件和v-once指令简单示例
Feb 29 Python
Python爬虫之Selenium鼠标事件的实现
Dec 04 Python
python中str内置函数用法总结
Dec 27 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调用C#开发的dll类库方法
2014/07/28 PHP
php中Redis的应用--消息传递
2017/03/28 PHP
tp5.1 框架数据库高级查询技巧实例总结
2020/05/25 PHP
firefox下frameset取不到值的解决方法
2010/09/06 Javascript
基于Javascript实现二级联动菜单效果
2016/03/04 Javascript
jQuery对象与DOM对象转换方法详解
2016/05/10 Javascript
jQuery动态增减行的实例代码解析(推荐)
2016/12/05 Javascript
Angular.js初始化之ng-app的自动绑定与手动绑定详解
2017/07/31 Javascript
Vue2.5学习笔记之如何在项目中使用和配置Vue
2018/09/26 Javascript
vue项目中全局引入1个.scss文件的问题解决
2019/08/01 Javascript
jQuery实现移动端笔触canvas电子签名
2020/05/21 jQuery
easyUI使用分页过滤器对数据进行分页操作实例分析
2020/06/01 Javascript
vue element-ui中table合计指定列求和实例
2020/11/02 Javascript
javascript实现时钟动画
2020/12/03 Javascript
跟老齐学Python之数据类型总结
2014/09/24 Python
python通过装饰器检查函数参数数据类型的方法
2015/03/13 Python
Python简单调用MySQL存储过程并获得返回值的方法
2015/07/20 Python
JS设计模式之责任链模式实例详解
2018/02/03 Python
python print出共轭复数的方法详解
2019/06/25 Python
深入学习python多线程与GIL
2019/08/26 Python
Python使用matplotlib实现交换式图形显示功能示例
2019/09/06 Python
Python基本语法之运算符功能与用法详解
2019/10/22 Python
Django多进程滚动日志问题解决方案
2019/12/17 Python
python中数据库like模糊查询方式
2020/03/02 Python
django日志默认打印request请求信息的方法示例
2020/05/17 Python
python中最小二乘法详细讲解
2021/02/19 Python
详解H5 活动页之移动端 REM 布局适配方法
2017/12/07 HTML / CSS
HTML5 3D书本翻页动画的实现示例
2019/08/28 HTML / CSS
西班牙三叶草药房:Farmacias Trébol
2019/05/03 全球购物
高中校园广播稿
2014/01/11 职场文书
焦裕禄精神心得体会
2014/09/02 职场文书
经理助理岗位职责
2015/02/02 职场文书
2015年机关后勤工作总结
2015/05/26 职场文书
Python使用psutil库对系统数据进行采集监控的方法
2021/08/23 Python
详解Python flask的前后端交互
2022/03/31 Python
详解PyTorch模型保存与加载
2022/04/28 Python