1、 简介

APScheduler的全称是Advanced Python Scheduler。它是一个轻量级的 Python 定时任务调度框架。APScheduler 支持三种调度任务:固定时间间隔,固定时间点(日期),Linux 下的 Crontab 命令。同时,它还支持异步执行、后台执行调度任务。

2、 安装

使用 pip 包管理工具安装 APScheduler 是最方便快捷的。

pip install APScheduler

3 、使用步骤

APScheduler 使用起来还算是比较简单。运行一个调度任务只需要以下三部曲。

新建一个 schedulers (调度器) 。
添加一个调度任务(job stores)。
运行调度任务。

下面是执行定时任务的简单示例代码

#!/usr/bin/env python
# coding:utf-8import time
from apscheduler.schedulers.blocking import BlockingScheduler
import loggingLOG_FORMAT = "%(asctime)s - %(levelname)s - %(message)s"
logging.basicConfig(filename='mypython.log', level=logging.INFO, format=LOG_FORMAT)today = time.strftime('%Y%m%d', time.localtime(time.time()))
nowDateTime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))global num
num = 0class myAP:def __init__(self):print("hello")def sayHello():global numnum = num + 1print(nowDateTime+'  任务一  hello word %d' % num)def sayHello11():global numnum = num + 1print(nowDateTime+'  任务二 o(* ̄︶ ̄*)o hello word %d' % num)if __name__ == "__main__":# BlockingSchedulerscheduler = BlockingScheduler()# scheduler.add_job(sayHello, 'cron', day_of_week='0-6', hour=19, minute=50)scheduler.add_job(sayHello, 'interval', seconds=2)scheduler.add_job(sayHello11, 'interval', seconds=3)scheduler.start()

执行结果如图

4、 基础组件

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

schedulers(调度器)
它是任务调度器,属于控制器角色。它配置作业存储器和执行器可以在调度器中完成,例如添加、修改和移除作业。

triggers(触发器)
描述调度任务被触发的条件。不过触发器完全是无状态的。

job stores(作业存储器)
任务持久化仓库,默认保存任务在内存中,也可将任务保存都各种数据库中,任务中的数据序列化后保存到持久化数据库,从数据库加载后又反序列化。

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

4.1 schedulers(调度器)

我个人觉得 APScheduler 非常好用的原因。它提供 7 种调度器,能够满足我们各种场景的需要。例如:后台执行某个操作,异步执行操作等。调度器分别是:

BlockingScheduler : 调度器在当前进程的主线程中运行,也就是会阻塞当前线程。
BackgroundScheduler : 调度器在后台线程中运行,不会阻塞当前线程。
AsyncIOScheduler : 结合 asyncio 模块(一个异步框架)一起使用。
GeventScheduler : 程序中使用 gevent(高性能的Python并发框架)作为IO模型,和 GeventExecutor 配合使用。
TornadoScheduler : 程序中使用 Tornado(一个web框架)的IO模型,用 ioloop.add_timeout 完成定时唤醒。
TwistedScheduler : 配合 TwistedExecutor,用 reactor.callLater 完成定时唤醒。
QtScheduler : 你的应用是一个 Qt 应用,需使用QTimer完成定时唤醒。

4.2 triggers(触发器)

APScheduler 有三种内建的 trigger:
1)date 触发器
date 是最基本的一种调度,作业任务只会执行一次。它表示特定的时间点触发。它的参数如下:

参数 说明
run_date (datetime 或 str) 作业的运行日期或时间
timezone (datetime.tzinfo 或 str) 指定时区

date 触发器使用示例如下:

from datetime import datetime
from datetime import date
from apscheduler.schedulers.background import BackgroundSchedulerdef job_func(text):print(text)scheduler = BackgroundScheduler()
# 在 2017-12-13 时刻运行一次 job_func 方法
scheduler .add_job(job_func, 'date', run_date=date(2017, 12, 13), args=['text'])
# 在 2017-12-13 14:00:00 时刻运行一次 job_func 方法
scheduler .add_job(job_func, 'date', run_date=datetime(2017, 12, 13, 14, 0, 0), args=['text'])
# 在 2017-12-13 14:00:01 时刻运行一次 job_func 方法
scheduler .add_job(job_func, 'date', run_date='2017-12-13 14:00:01', args=['text'])
scheduler.start()
interval 触发器

固定时间间隔触发。interval 间隔调度,参数如下:

参数 说明
weeks (int) 间隔几周
days (int) 间隔几天
hours (int) 间隔几小时
minutes (int) 间隔几分钟
seconds (int) 间隔多少秒
start_date (datetime 或 str) 开始日期
end_date (datetime 或 str) 结束日期
timezone (datetime.tzinfo 或str) 时区
cron 触发器

在特定时间周期性地触发,和Linux crontab格式兼容。它是功能最强大的触发器。
我们先了解 cron 参数:

参数 说明
year (int 或 str) 年,4位数字
month (int 或 str) 月 (范围1-12)
day (int 或 str) 日 (范围1-31
week (int 或 str) 周 (范围1-53)
day_of_week (int 或 str) 周内第几天或者星期几 (范围0-6 或者mon,tue,wed,thu,fri,sat,sun)
hour (int 或 str) 时 (范围0-23)
minute (int 或 str) 分 (范围0-59)
second (int 或 str) 秒 (范围0-59)
start_date (datetime 或 str) 最早开始日期(包含)
end_date (datetime 或 str) 最晚结束时间(包含)
timezone (datetime.tzinfo 或str) 指定时区

cron 触发器使用示例如下:

import datetime
from apscheduler.schedulers.background import BackgroundSchedulerdef job_func(text): print("当前时间:", datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S.%f")[:-3])
scheduler = BackgroundScheduler() # 在每年 1-3、7-9 月份中的每个星期一、二中的 00:00, 01:00, 02:00 和 03:00 执行 job_func 任务
scheduler .add_job(job_func, 'cron', month='1-3,7-9',day='0, tue', hour='0-3')
scheduler.start()
4.3 作业存储(job store)

该组件是对调度任务的管理。
1)添加 job
有两种添加方法,其中一种上述代码用到的 add_job(), 另一种则是scheduled_job()修饰器来修饰函数。

这个两种办法的区别是:第一种方法返回一个 apscheduler.job.Job 的实例,可以用来改变或者移除 job。第二种方法只适用于应用运行期间不会改变的 job。

第二种添加任务方式的例子:

@scheduler.scheduled_job(job_func, 'interval', minutes=2)
def job_func(text): print(datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]) scheduler = BackgroundScheduler() scheduler.start()

2)移除 job
移除 job 也有两种方法:remove_job() 和 job.remove()。
remove_job() 是根据 job 的 id 来移除,所以要在 job 创建的时候指定一个 id。
job.remove() 则是对 job 执行 remove 方法即可

scheduler.add_job(job_func, 'interval', minutes=2, id='job_one')
scheduler.remove_job(job_one)
job = add_job(job_func, 'interval', minutes=2, id='job_one')
job.remvoe()

3)获取 job 列表
通过 scheduler.get_jobs() 方法能够获取当前调度器中的所有 job 的列表

修改 job
如果你因计划改变要对 job 进行修改,可以使用Job.modify() 或者 modify_job()方法来修改 job 的属性。但是值得注意的是,job 的 id 是无法被修改的。

scheduler.add_job(job_func, 'interval', minutes=2, id='job_one')
scheduler.start()
# 将触发时间间隔修改成 5分钟
scheduler.modify_job('job_one', minutes=5)job = scheduler.add_job(job_func, 'interval', minutes=2)
# 将触发时间间隔修改成 5分钟
job.modify(minutes=5)

5)关闭 job
默认情况下调度器会等待所有正在运行的作业完成后,关闭所有的调度器和作业存储。如果你不想等待,可以将 wait 选项设置为 False。

scheduler.shutdown()
scheduler.shutdown(wait=false)
4.4 执行器(executor)

执行器顾名思义是执行调度任务的模块。最常用的 executor 有两种:ProcessPoolExecutor 和 ThreadPoolExecutor

下面是显式设置 job store(使用mongo存储)和 executor 的代码的示例。

from pymongo import MongoClient
from apscheduler.schedulers.blocking import BlockingScheduler
from apscheduler.jobstores.mongodb import MongoDBJobStore
from apscheduler.jobstores.memory import MemoryJobStore
from apscheduler.executors.pool import ThreadPoolExecutor, ProcessPoolExecutordef my_job():print 'hello world'
host = '127.0.0.1'
port = 27017
client = MongoClient(host, port)jobstores = {'mongo': MongoDBJobStore(collection='job', database='test', client=client),'default': MemoryJobStore()
}
executors = {'default': ThreadPoolExecutor(10),'processpool': ProcessPoolExecutor(3)
}
job_defaults = {'coalesce': False,'max_instances': 3
}
scheduler = BlockingScheduler(jobstores=jobstores, executors=executors, job_defaults=job_defaults)
scheduler.add_job(my_job, 'interval', seconds=5)try:scheduler.start()
except SystemExit:client.close()

python 定时任务框架APScheduler相关推荐

  1. Python 定时任务框架 APScheduler

    Python定时任务:多种实现方法 Python 定时任务框架 APScheduler 详解 APScheduler官方文档 Git-hub examples 例子1:apscheduler.trig ...

  2. Python定时任务框架APScheduler

    2019独角兽企业重金招聘Python工程师标准>>> APScheduler是基于Quartz的一个Python定时任务框架,实现了Quartz的所有功能,使用起来十分方便.提供了 ...

  3. Python定时任务框架APScheduler快速入门

    文章目录 前言 一.安装 二.简单使用 1.代码如下(示例) 2.APScheduler 的运行流程 三.APScheduler 四组件 1.调度器(schedulers)---不同程序引用 2.任务 ...

  4. Python定时任务框架apscheduler,定时执行多个固定任务

    apscheduler Python 的 apscheduler 提供了非常丰富而且方便易用的定时任务接口. apscheduler使用起来十分方便.提供了基于日期.固定时间间隔以及crontab 类 ...

  5. python定时任务之cron_Python定时任务框架APScheduler 3.0.3 Cron示例

    APScheduler是基于Quartz的一个Python定时任务框架,实现了Quartz的所有功能,使用起来十分方便.提供了基于日期.固定时间间隔以及crontab类型的任务,并且可以持久化任务.基 ...

  6. python apscheduler执行_Python下定时任务框架APScheduler的使用

    今天准备实现一个功能需要用到定时执行任务,所以就看到了Python的一个定时任务框架APScheduler,试了一下感觉还不错. 1.APScheduler简介: APScheduler是Python ...

  7. python定时任务框架_Python定时任务框架APScheduler

    APScheduler是基于Quartz的一个Python定时任务框架,实现了Quartz的所有功能,使用起来十分方便.提供了基于日期.固定时间间隔以及crontab类型的任务,并且可以持久化任务.基 ...

  8. python定时任务每月1号_Python 定时任务框架 APScheduler 详解

    APScheduler 最近想写个任务调度程序,于是研究了下 Python 中的任务调度工具,比较有名的是:Celery,RQ,APScheduler. Celery:非常强大的分布式任务调度框架 R ...

  9. 在Linux服务器上执行python定时任务(APScheduler定时框架)

    目标:在Linux服务器上,定时运行python脚本. 这个小玩意儿适用于让服务器做一些自动的东西,比如定时查库发送报表.定时让爬虫爬数据.定时提醒等等. 那有同学要问了:为啥不用自己电脑直接运行?- ...

  10. python定时任务:apscheduler的使用(还有一个celery~)

    APScheduler简介 在平常的工作中几乎有一半的功能模块都需要定时任务来推动,例如项目中有一个定时统计程序,定时爬出网站的URL程序,定时检测钓鱼网站的程序等等,都涉及到了关于定时任务的问题,第 ...

最新文章

  1. 研究生一年级,非计算机专业,自学机器学习现实吗?
  2. idea提交spark任务,内存不足,指定JVM内存的解决方法
  3. webRTC——浏览器里的音视频通话 1
  4. python中反向切片用法_使用Python中的切片[:0:-1]反转列表
  5. iis php7页面空白,iis 无法显示htm页面问题解决
  6. Python黑帽子_hack与渗透测试编程之道 第三章代码
  7. universal installer里面没有已安装的产品_【ns11系统之usb安装工具配套】安装工具已经更新至4.5【后面附上批处理内容修改】...
  8. java 统计库_几个可用于数据挖掘和统计分析的java库
  9. 浙大PAT乙级练习1001
  10. “大狼狗加密专家”使用简介
  11. .net4.0 使用低版本生成的dll, 混合模式程序集市针对V1.1.4322,无法在 4.0 运行时中加载该程序解决办法
  12. Pygame - Python游戏编程入门(3)
  13. 华为无线学习笔记--WLAN(无线)实验
  14. Sql Hacks 阅读感悟——数值处理
  15. 安卓自定义View画钟实现转动
  16. 怎样判定应用程序自身运行在“兼容模式”下?
  17. Dede修改默认URL命名规则
  18. 计算机科学与技术考研调剂信息,中国科学技术大学计算机科学与技术学院2020考研调剂信息...
  19. 关于天猫抢茅台的Python秒杀脚本!
  20. 长三角数学建模------赛后总结

热门文章

  1. 架构之美-读书笔记之二
  2. 个人免签支付Java版 雨荷云码支付码支付易支付个人/企业支付宝微信二维码收款app监控
  3. run rhadoop
  4. Win 10 UEFI + Ubuntu 18.04 UEFI 双系统 (by quqi99)
  5. Unity编辑器控制粒子系统Playback Time
  6. 微信小程序中的列表渲染
  7. 怎样让网站显示在 Google 搜索结果中?
  8. 全国计算机一级2021选择题,2021年度全国计算机一级考试选择题试题与详细答案.doc...
  9. 一级计算机office选择题题库及答案,计算机一级msoffice选择题题库40套含答案
  10. 最新破解无线网络破解教程,一键破解wpa/wpa2密码软件下载。破解不用抓包不用跑字典。快速破解wpa/wpa2密码...