前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flask 学习-87.Flask-APScheduler 持久化定时任务保存到mysql数据库

Flask 学习-87.Flask-APScheduler 持久化定时任务保存到mysql数据库

作者头像
上海-悠悠
发布2023-01-03 12:58:22
1.9K0
发布2023-01-03 12:58:22
举报

前言

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

job stores 存储

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

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

默认是存储在内存中,也就是重启服务后,就无法查看到之前添加的任务了。我们希望任务能保存到数据库,让任务一直都在,可以使用sqlalchemy保存到mysql数据库。

mysql 数据库持久化配置

代码语言:javascript
复制
# mysql 数据库持久化配置
from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore
SQLALCHEMY_DATABASE_URI = "mysql+mysqlconnector://root:123456@127.0.0.1:3306/web"
    # 存储位置
    SCHEDULER_JOBSTORES = {
        'default': SQLAlchemyJobStore(url=SQLALCHEMY_DATABASE_URI)
    }

MongoDB 数据库持久化配置

代码语言:javascript
复制
# MongoDB 数据库持久化配置
from apscheduler.jobstores.mongodb import MongoDBJobStore
SCHEDULER_JOBSTORES = {
        'default': MongoDBJobStore(host='mongoserver', port=27017)
    }

redis 持久化配置

代码语言:javascript
复制
from apscheduler.jobstores.redis import RedisJobStore
REDIS = {
        'host': '127.0.0.1',
        'port': '6379',
        'db': 0,
        'password': '****'
    }
SCHEDULER_JOBSTORES = {
        'default': RedisJobStore(**REDIS)
    }

使用示例

代码语言:javascript
复制
from flask import Flask
from flask_apscheduler import APScheduler
import time
from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore

class Config(object):
    SCHEDULER_TIMEZONE = 'Asia/Shanghai'  # 配置时区
    SCHEDULER_API_ENABLED = True  # 调度器开关
    # 配置mysql
    SQLALCHEMY_DATABASE_URI = 'mysql+mysqlconnector://root:123456@127.0.0.1:3306/web'
    # job存储位置
    SCHEDULER_JOBSTORES = {
        'default': SQLAlchemyJobStore(url=SQLALCHEMY_DATABASE_URI)
    }
    # 线程池配置
    SCHEDULER_EXECUTORS = {
        'default': {'type': 'threadpool', 'max_workers': 10}
    }

scheduler = APScheduler()

def task1(x):
    print(f'task 1 executed --------: {x}', time.time())

def task2(x):
    print(f'task 2 executed --------: {x}', time.time())

if __name__ == '__main__':
    app = Flask(__name__)
    app.config.from_object(Config())
    scheduler.init_app(app)
    # add_job() 添加任务
    scheduler.add_job(func=task1, args=('循环',), trigger='interval', seconds=5, replace_existing=True, id='interval_task')
    scheduler.add_job(func=task2, args=('定时任务',), trigger='cron', second='*/10', replace_existing=True, id='cron_task')
    scheduler.start()
    app.run(use_reloader=False)

运行后数据库会生成一张表apscheduler_jobs

可以查看任务名称和下一次执行时间

启动和暂停任务

暂停任务:根据任务id名称,调用pause_job 可以暂停任务

代码语言:javascript
复制
scheduler.pause_job(task_id)

重新启动任务

代码语言:javascript
复制
scheduler.resume_job(task_id)

删除任务

代码语言:javascript
复制
scheduler.remove_job(task_id)

查看任务

代码语言:javascript
复制
all_jobs = scheduler.get_jobs()
# 查看指定的job信息
job_info = scheduler.get_job(task_id)
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从零开始学自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 使用示例
  • 启动和暂停任务
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档