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写的PHPMyAdmin暴力破解工具代码
Aug 06 Python
Python中字典和JSON互转操作实例
Jan 19 Python
Python画图学习入门教程
Jul 01 Python
python中urlparse模块介绍与使用示例
Nov 19 Python
Python标准库inspect的具体使用方法
Dec 06 Python
python实现求最长回文子串长度
Jan 22 Python
对python添加模块路径的三种方法总结
Oct 16 Python
django使用LDAP验证的方法示例
Dec 10 Python
总结Python图形用户界面和游戏开发知识点
May 22 Python
flask应用部署到服务器的方法
Jul 12 Python
Keras使用ImageNet上预训练的模型方式
May 23 Python
Python如何在main中调用函数内的函数方式
Jun 01 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
异世界新番又来了,同样是从零开始,男主的年龄降到5岁
2020/04/09 日漫
桌面中心(一)创建数据库
2006/10/09 PHP
在PHP里得到前天和昨天的日期的代码
2007/08/16 PHP
Laravel中注册Facades的步骤详解
2016/03/16 PHP
Laravel框架生命周期与原理分析
2018/06/12 PHP
基于jquery & json的省市区联动代码
2012/06/26 Javascript
自己动手手写jQuery插件总结
2015/01/20 Javascript
让图片跳跃起来  javascript图片轮播特效
2016/02/16 Javascript
Bootstrap 折叠(Collapse)插件用法实例详解
2016/06/01 Javascript
url中的特殊符号有什么含义(推荐)
2016/06/17 Javascript
基于vue的下拉刷新指令和滚动刷新指令
2016/12/23 Javascript
浅谈javascript的闭包
2017/01/23 Javascript
基于Vue实现后台系统权限控制的示例代码
2017/08/29 Javascript
vue获取input输入值的问题解决办法
2017/10/17 Javascript
js canvas实现红包照片效果
2018/08/21 Javascript
vue-cli 打包后提交到线上出现 "Uncaught SyntaxError:Unexpected token" 报错
2018/11/06 Javascript
Python爬取读者并制作成PDF
2015/03/10 Python
python输出指定月份日历的方法
2015/04/23 Python
python目录与文件名操作例子
2016/08/28 Python
Tensorflow加载预训练模型和保存模型的实例
2018/07/27 Python
解决python中无法自动补全代码的问题
2018/12/04 Python
使用Python-OpenCV向图片添加噪声的实现(高斯噪声、椒盐噪声)
2019/05/28 Python
TensorFLow 不同大小图片的TFrecords存取实例
2020/01/20 Python
Python捕获异常堆栈信息的几种方法(小结)
2020/05/18 Python
Python 解析库json及jsonpath pickle的实现
2020/08/17 Python
详解Canvas实用库Fabric.js使用手册
2019/01/07 HTML / CSS
一道输出判断型Java面试题
2014/10/01 面试题
工程地质勘察专业大学生求职信
2013/10/13 职场文书
卫生巾广告词
2014/03/18 职场文书
产品质量保证书
2014/04/29 职场文书
罚款通知怎么写
2015/04/22 职场文书
离婚起诉状范本
2015/05/19 职场文书
继续教育心得体会(共6篇)
2016/01/19 职场文书
新西兰:最新留学学习计划书写作指南
2019/07/15 职场文书
Python爬虫进阶之Beautiful Soup库详解
2021/04/29 Python
Pytest中conftest.py的用法
2021/06/27 Python