Flask-APScheduler使用教程

作者:lizhonglin
github: https://github.com/Leezhonglin/
blog: https://leezhonglin.github.io/

APScheduler是一个Python库,可让您安排稍后执行的Python代码,是一套任务调度框架,可以用来做定时任务控制器,可以添加删除任务。如果将作业存储在数据库中,它们也将在调度程序重新启动后继续运行并保持其状态。重新启动调度程序后,它将运行它应该在脱机时运行的所有作业。

除此之外,APScheduler还可以用作特定于平台的调度程序(如cron守护程序或Windows任务调度程序)的跨平台,特定于应用程序的替代程序。但请注意,APScheduler本身不是守护程序或服务,也不附带任何命令行工具。它主要用于在现有应用程序中运行。也就是说,APScheduler确实为您提供了一些构建块来构建调度程序服务或运行专用的调度程序进程。

APScheduler有三个可以使用的内置调度系统:

  • Cron式调度(可选的开始/结束时间)
  • 基于区间的执行(偶数间隔运行作业,可选的开始/结束时间)
  • 一次性延迟执行(在设定的日期/时间运行一次作业)

APScheduler是一个python的第三方库,用来提供python的后台程序。包含四个组件,分别是:

  • triggers: 任务触发器组件,提供任务触发方式
  • job stores: 任务商店组件,提供任务保存方式
  • executors: 任务调度组件,提供任务调度方式
  • schedulers: 任务调度组件,提供任务工作方式

具体内容如下:

triggers: 支持三种任务触发方式

  • date:固定日期触发器,任务只运行一次,运行完毕自动清除;若错过指定运行时间,任务不会被创建

    参数 说明
    run_date (datetime 或 str) 作业的运行日期或时间
    timezone (datetime.tzinfo 或 str) 指定时区
    例如# 在 2019-4-24 00:00:01 时刻运行一次 start_system 方法
    scheduler .add_job(start_system, 'date', run_date='2019-4-24 00:00:01', args=['text'])
    
  • interval:时间间隔触发器,每个一定时间间隔执行一次。

    参数 说明
    weeks (int) 间隔几周
    days (int) 间隔几天
    hours (int) 间隔几小时
    minutes (int) 间隔几分钟
    seconds (int) 间隔多少秒
    start_date (datetime 或 str) 开始日期
    end_date (datetime 或 str) 结束日期
    # 在 2019-4-24 00:00:00 - 2019-4-24 08:00:00 之间, 每隔两小时执行一次 alarm_job 方法
    scheduler .add_job(alarm_job, 'interval', hours=2, start_date='2019-4-24 00:00:00' , end_date='2019-4-24 08:00:00')
    
  • cron:cron风格的任务触发

    参数 说明
    year (int 或 str) 表示四位数的年份 (2019)
    month(int|str) 月 (范围1-12)
    day(int|str) 日 (范围1-31)
    week(int|str) 周 (范围1-53)
    day_of_week (int|str) 表示一周中的第几天,既可以用0-6表示也可以用其英语缩写表示
    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) 表示时区取值

    (int|str) 表示参数既可以是int类型,也可以是str类型
    (datetime | str) 表示参数既可以是datetime类型,也可以是str类型

    例如:表示每5秒执行该程序一次,相当于interval 间隔调度中seconds = 5

    sched.add_job(my_job, 'cron',second = '*/5')
    

job stores: 支持四种任务存储方式

  • memory:默认配置任务存在内存中
  • mongdb:支持文档数据库存储
  • sqlalchemy:支持关系数据库存储
  • redis:支持键值对数据库存储

schedulers: 调度器主要分三种,一种独立运行的,一种是后台运行的,最后一种是配合其它程序使用

  • BlockingScheduler: 当这个调度器是你应用中 唯一要运行 的东西时使用
  • BackgroundScheduler: 当 不运行其它框架 的时候使用,并使你的任务在 后台运行
  • AsyncIOScheduler: 当你的程序是 异步IO模型 的时候使用
  • GeventScheduler: 和 gevent 框架配套使用
  • TornadoScheduler: 和 tornado 框架配套使用
  • TwistedScheduler: 和 Twisted 框架配套使用
  • QtScheduler: 开发 qt 应用的时候使用
1.安装
pip install Flask-APScheduler
2.在flask中使用调度器

首先在flask的create_app函数中创建最初的调度器

from apscheduler.triggers.interval import IntervalTrigger###此方法负责初始化app
def create_app(config_name):app=Flask(__name__)CORS(app)app.config.from_object(config[config_name])config[config_name].init_app(app)###初始化数据库db.init_app(app)
#####################################################上面代码忽略# 这里是重点  # 初始化备份数据库定时器scheduler.init_app(app)# # 解决FLASK DEBUG模式定时任务执行两次if os.environ.get('WERKZEUG_RUN_MAIN') == 'true':scheduler.api_enabled = Truescheduler.init_app(app)# 实例话interval对象,如果不实例话的话有可能会报错没有interval这个interval = IntervalTrigger(days = 2,start_date='2019-4-24 08:00:00',end_date='2099-4-24 08:00:00',timezone='Asia/Shanghai')# dbDump 是一个备份数据库的函数,这个根据自己的实际情况来看scheduler.add_job(func=dbDump,trigger=interval,id='bak_one')scheduler.start()
######################################################下面代码忽略###初始化上传下载和导出目录# init_static_path()###注册蓝图register_app(app)# ###初始化日志init_log()return app

如果需要重新替换上面的任务可以在任务中多添加一个参数replace_existing=True由上面的两天备份一次 变成每天备份一次。配置成功后他会自动去替换上面的定时器。

 # 判断配置文件变化 更新定时任务
if os.environ.get('WERKZEUG_RUN_MAIN') == 'true':interval = IntervalTrigger(days=1,start_date='2019-4-24 08:00:00',end_date='2099-4-24 08:00:00',timezone='Asia/Shanghai')scheduler.add_job(func=dbDump,trigger=interval,id='bak_one', replace_existing=True)

replace_existing=True 这个参数非常重要,在这个地方弄了很久,开始一直不能替换第一次任务。

问题解决:

scheduler.add_job(dbDump,'interval',id='bak_one',days=1,start_date='2019-4-24 08:00:00',end_date='2099-4-24 08:00:00',replace_existing=True)

如果是按照上面创建的任务的话在使用pyinstaller打包生成的可执行文件,运行的时候会出现如下面的问题

APScheduler: LookupError: No trigger by the name “interval” was found

解决方案是:替换成我上面的方式去创建任务就可以解决的。

Flask-APScheduler使用教程 1相关推荐

  1. API接口开发其实特简单,Python Flask Web 框架教程来了

    大家好,日常工作中,无论你是数据工程师.数据挖掘工程师,甚至数据分析人员,都不可避免的与他人进行数据交互,API接口提供数据是最常见的形式. 今天我给大家分享 Python Flask Web 框架教 ...

  2. python flask+apscheduler定时任务导致数据重复和错误

    python flask+apscheduler 定时任务导致数据重复和错误的解决办法 我们先看一下未定时前的代码,每一次执行数据都是准确的,是我们想要的结果 import datetime clas ...

  3. python flask热更新_python(flask)+apscheduler定时邮件重发两次的问题

    工作中遇到一个需求,要在现有系统(airbnb家的开源平台superset)上添加一个定时邮件的功能. 定时邮件功能使用的是apscheduler这个库,关于怎么用这里就不多赘述了反正网上都有. 主要 ...

  4. 【Flask】官方教程(Tutorial)-part2:蓝图-视图、模板、静态文件

    前序文章: 官方教程(Tutorial)-part1:项目布局.应用程序设置.定义和访问数据库 蓝图-视图 视图函数是您为响应应用程序请求而编写的代码.Flask 使用模式将传入的请求 URL 与应该 ...

  5. 【Flask】官方教程(Tutorial)-part4(完结)测试覆盖度、部署到生产、持续开发

    前序文章: 官方教程(Tutorial)-part1:项目布局.应用程序设置.定义和访问数据库 官方教程(Tutorial)-part2:蓝图-视图.模板.静态文件 官方教程(Tutorial)-pa ...

  6. asp python 定时任务_python定时任务最强框架APScheduler详细教程

    APScheduler定时任务 上次测试女神听了我的建议,已经做好了要给项目添加定时任务的决定了.但是之前提供的四种方式中,她不知道具体选择哪一个.为了和女神更近一步,我把我入行近10年收藏的干货免费 ...

  7. python flask快速入门与进阶-Flask基础进阶与python flask实战bbs教程

    ├─Flask基础进阶 │ 01-HTTP 基础知识.mp4 │ 02-python CGI 与 WebServer.mp4 │ 03-virtuanenv配置及Flask快速示例.mp4 │ 04- ...

  8. Flask结合flask_sqlalchemy教程

    Flask结合flask_sqlalchemy 一.flask_sqlalchemy是什么? 二.使用指南 1.引入库 2.实例:单表操作应用 3.实例:多表结合应用(外键) 三.常用操作 四.api ...

  9. Flask框架使用教程-运行第一步

    今天,我们学习python web中的flask框架,当然首先是安装flask pip install flask 然后用pycharm打开.新建项目里面的flask,自动创建,代码如下: from ...

  10. Flask框架详细教程

    首先,创建一个Flask的项目,在选择编译环境的时候,可以选择新建一个虚拟的编译环境,关于创建虚拟环境,以前写过一篇博客,需要的可以参考:(4条消息) python搭建虚拟环境_Kisskiss_v的 ...

最新文章

  1. FlasCC例子研究之Animation
  2. 智源青年科学家张新雨:从模型平均到集成学习、迁移学习
  3. 80端口被system(pid=4)占用的解决方法
  4. DDD中的聚合和UML中的聚合以及组合的关系
  5. 第二十二节: 以SQLServer为例介绍数据库自有的锁机制(共享锁、更新锁、排它锁等)和事务隔离级别 :
  6. as_hash ruby_Hash.merge(other_hash)方法与Ruby中的示例
  7. plc tcp ip通讯怎么只能连一个客户端_一款Ethernet/IP和Modbus TCP转OPC UA产品
  8. 单电源运算放大器全波整流电路_电子电路识图从入门到精通,从零开始学电子电路...
  9. 南溪的远程桌面软件使用笔记
  10. OpenCV基本图形绘制之圆
  11. Linux宝库名人轶事栏目 | 我与中国开源软件二十年(一)
  12. TSAP(7) : ARIMA模型
  13. 【Hill Cipher】希尔密码描述 by Xiaosi_lemon
  14. LOJ#2339. 「WC2018」通道(边分治+虚树)
  15. 天价球鞋事件中,得物在扮演哪种身份?
  16. 模拟量万能换算公式4-20ma
  17. stimulsoft入门教程:报表与页面上的图表(一)
  18. 动态规划法(二)找零钱问题
  19. 笔记本未指定打印机服务器,打印机出现在未指定里怎么办?可以这样解决
  20. 端午节假期----心情记录

热门文章

  1. [转载] 百科全说——陈焕然:揭秘高科技美容(10-02-22)
  2. Java——重写hashCode()和euqals()方法
  3. Balsamiq Mockups注册码
  4. 黑苹果的开机开不起来的解决方法
  5. 外贸用什么企业邮箱好?哪家企业邮箱安全又可靠?
  6. Python 基于BP神经网络的鸢尾花分类
  7. 英国帝国理工出品——SSIM对抗攻击
  8. Android notes
  9. python:假设一年期定期利率为3.25%,计算一下需要过多少年,一万元的一年定期存款连本带息能翻番?
  10. sql根据出生日期算年龄