Flask-APScheduler 定时运行api接口

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Flask-APScheduler 定时运行api接口

1.APScheduler简介


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


😁我这里先给出一个写调度api的模版吧


步骤一:写好自己运行的函数 def fuction()

步骤二:创建flask路由,在路由下定义一个需要调度的函数def job_function():,把之前的def fuction()函数放到里面

步骤三:创建调度任务函数,def task(),这里需要配置任务调度的方式等参数

步骤四:运行任务 task(),主要写在主函数外面

步骤五:主函数运行api接口,app.run()


from flask import Flask
from flask_apscheduler import APScheduler
import datetime
def fuction()
    print("showmaker")
app = Flask(__name__)
@app.route("/test", methods=['GET','POST'])
def job_function():
    fuction()
def task():
    scheduler = APScheduler()
    scheduler.init_app(app)
    # 定时任务的格式
    scheduler.add_job(func=job_function, trigger='interval',seconds=3600, id='my_job_id')
    scheduler.start()
# 写在main里面,IIS不会运行
task()
if __name__ == "__main__":
    app.run(debug=False, port="5005")

2.APScheduler调度方式


APScheduler有三种可以调度任务的方式:


我们的目的就是通过api接口,在终端一直运行这个接口进程,让它自己去调度我们的程序,这里的程序也就是任务。


  1. 可以选择调度的任务,开始和结束的时间
  2. 基于一个时间区间,间隔的执行任务
  3. 一次性任务执行


3.APScheduler组件


知道了我们的任务有哪些调度方式,现在了解一下APScheduler的组件:


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

3.1 triggers


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

date:


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


参数 说明
run_date 任务运行日期
timezone 时区


scheduler.add_job(func=job_function, trigger='date',run_date='2021-10-27 13:00:00', id='my_job_id')


interval:

时间间隔触发器,每个一定时间间隔执行一次。

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


scheduler.add_job(func=job_function, trigger='interval',seconds=3600, id='my_job_id')

cron

cron风格的任务触发,这个不常用就不介绍了,我懒


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


memory:默认配置任务存在内存中

mongdb:支持文档数据库存储

sqlalchemy:支持关系数据库存储

redis:支持键值对数据库存储

这里如果你的数据库是mysql,我推荐使用sqlalchemy作为数据库,用过create_engine来连接数据库实现数据库操作,比如说删除数据记录,写入数据记录。这里是我自己的例子


from flask import Flask
from flask_apscheduler import APScheduler
import datetime
import pandas as pd
from sqlalchemy import create_engine
from sqlalchemy import MetaData,Table
def delete():
    engine = create_engine('mysql+pymysql://用户名:密码@ip:端口号/数据库?charset=gbk')
    meta = MetaData(bind=engine)
    tb_1 = Table('数据表名', meta, autoload=True, autoload_with=engine)
    tb_2 = Table('数据表名', meta, autoload=True, autoload_with=engine)
    dlt_1=tb_1.delete()
    dlt_2=tb_2.delete()
    conn = engine.connect()
    # 执行delete操作
    conn.execute(dlt_1)
    conn.execute(dlt_2)
    conn.close()
def write(t):
    r1=pd.DataFrame()
    r3=pd.DataFrame()
    engine = create_engine('mysql+pymysql://用户名:密码@ip:端口号/数据库?charset=gbk')
    r1.to_sql('数据表名', con=engine, if_exists='append', index=False)
    r3.to_sql('数据表名', con=engine, if_exists='append', index=False)
def write_log(buf):
    print(buf)
    with open('test.txt', 'a') as f:
        f.write(buf + "\n")
app = Flask(__name__)
@app.route("/test", methods=['GET','POST'])
def job_function():
    now_time=datetime.datetime.now()
    t=now_time.strftime('%Y-%m-%d')
    write_log("update time:"+t)
    delete()
    write_log("delete data")
    write(t)
    write_log("write data")
def task():
    scheduler = APScheduler()
    scheduler.init_app(app)
    # 定时任务,每隔10s执行1次
    scheduler.add_job(func=job_function, trigger='interval',seconds=60, id='my_job_id')
    scheduler.start()
# 写在main里面,IIS不会运行
task()
if __name__ == "__main__":
    app.run(debug=False, port="8888")


最后可以在test.txt查看自己的调用的时间


3.3 schedulers:


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


BlockingScheduler: 当这个调度器是你应用中 唯一要运行 的东西时使用

BackgroundScheduler: 当不运行其它框架 的时候使用,并使你的任务在 后台运行

AsyncIOScheduler: 当你的程序是 异步IO模型 的时候使用

GeventScheduler: 和 gevent 框架配套使用

TornadoScheduler: 和 tornado 框架配套使用

TwistedScheduler: 和 Twisted 框架配套使用

QtScheduler: 开发 qt 应用的时候使用

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2天前
|
人工智能 自然语言处理 API
Multimodal Live API:谷歌推出新的 AI 接口,支持多模态交互和低延迟实时互动
谷歌推出的Multimodal Live API是一个支持多模态交互、低延迟实时互动的AI接口,能够处理文本、音频和视频输入,提供自然流畅的对话体验,适用于多种应用场景。
17 3
Multimodal Live API:谷歌推出新的 AI 接口,支持多模态交互和低延迟实时互动
|
4天前
|
XML JSON 缓存
阿里巴巴商品详情数据接口(alibaba.item_get) 丨阿里巴巴 API 实时接口指南
阿里巴巴商品详情数据接口(alibaba.item_get)允许商家通过API获取商品的详细信息,包括标题、描述、价格、销量、评价等。主要参数为商品ID(num_iid),支持多种返回数据格式,如json、xml等,便于开发者根据需求选择。使用前需注册并获得App Key与App Secret,注意遵守使用规范。
|
2天前
|
JSON API 开发者
淘宝买家秀数据接口(taobao.item_review_show)丨淘宝 API 实时接口指南
淘宝买家秀数据接口(taobao.item_review_show)可获取买家上传的图片、视频、评论等“买家秀”内容,为潜在买家提供真实参考,帮助商家优化产品和营销策略。使用前需注册开发者账号,构建请求URL并发送GET请求,解析响应数据。调用时需遵守平台规定,保护用户隐私,确保内容真实性。
|
3天前
|
搜索推荐 数据挖掘 API
淘宝天猫商品评论数据接口丨淘宝 API 实时接口指南
淘宝天猫商品评论数据接口(Taobao.item_review)提供全面的评论信息,包括文字、图片、视频评论、评分、追评等,支持实时更新和高效筛选。用户可基于此接口进行数据分析,支持情感分析、用户画像构建等,同时确保数据使用的合规性和安全性。使用步骤包括注册开发者账号、创建应用获取 API 密钥、发送 API 请求并解析返回数据。适用于电商商家、市场分析人员和消费者。
|
13天前
|
JSON API 开发工具
淘宝实时 API 接口丨淘宝商品详情接口(Taobao.item_get)
淘宝商品详情接口(Taobao.item_get)允许开发者获取商品的详细信息,包括基本信息、描述、卖家资料、图片、属性及销售情况等。开发者需注册账号、创建应用并获取API密钥,通过构建请求获取JSON格式数据,注意遵守平台规则,合理使用接口,确保数据准确性和时效性。
|
14天前
|
JSON 安全 API
Python调用API接口的方法
Python调用API接口的方法
63 5
|
14天前
|
JSON 缓存 监控
淘宝商品详情接口(Taobao.item_get)丨淘宝API接口指南
淘宝商品详情接口(Taobao.item_get)允许开发者通过HTTP GET方法获取淘宝商品的详细信息,包括商品ID、价格、库存等。请求需包含key、secret、num_iid等必选参数,支持缓存及多种返回格式。此接口广泛应用于电商数据分析、商品选品、价格监控等领域,提升商家运营效率。
|
17天前
|
JSON 搜索推荐 API
LAZADA关键词搜索API接口的获取与应用
Lazada作为东南亚领先的电商平台,为满足开发者和商户需求,开放了关键词搜索API接口。本文详细介绍该接口的获取与应用,助力提升电商业务效率。接口支持关键词搜索、指定搜索范围和排序方式,提供精准、灵活且全面的数据支持,促进电商应用和服务的优化与创新。
21 3
|
22天前
|
JSON 前端开发 API
使用Python和Flask构建简易Web API
使用Python和Flask构建简易Web API
|
22天前
|
存储 API 数据库
使用Python和Flask构建简单的RESTful API
使用Python和Flask构建简单的RESTful API