Flask 学习-87.Flask-APScheduler 持久化定时任务保存到mysql数据库
2023-06-13 09:16:27 时间
前言
APScheduler 有四种组件,分别是:调度器(scheduler),作业存储(job store),触发器(trigger),执行器(executor)。
job stores 存储
job stores 支持四种任务存储方式
- memory: 默认配置任务存在内存中
- mongdb: 支持文档数据库存储
- sqlalchemy: 支持关系数据库存储
- redis: 支持键值对数据库存储
默认是存储在内存中,也就是重启服务后,就无法查看到之前添加的任务了。我们希望任务能保存到数据库,让任务一直都在,可以使用sqlalchemy保存到mysql数据库。
mysql 数据库持久化配置
# 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 数据库持久化配置
# MongoDB 数据库持久化配置
from apscheduler.jobstores.mongodb import MongoDBJobStore
SCHEDULER_JOBSTORES = {
'default': MongoDBJobStore(host='mongoserver', port=27017)
}
redis 持久化配置
from apscheduler.jobstores.redis import RedisJobStore
REDIS = {
'host': '127.0.0.1',
'port': '6379',
'db': 0,
'password': '****'
}
SCHEDULER_JOBSTORES = {
'default': RedisJobStore(**REDIS)
}
使用示例
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 可以暂停任务
scheduler.pause_job(task_id)
重新启动任务
scheduler.resume_job(task_id)
删除任务
scheduler.remove_job(task_id)
查看任务
all_jobs = scheduler.get_jobs()
# 查看指定的job信息
job_info = scheduler.get_job(task_id)
相关文章
- MySQL Status Ndb_api_trans_close_count_slave 数据库状态作用意思及如何正确
- Java连接MySQL数据库的简单步骤(java如何连接mysql数据库)
- MySQL指定配置文件的正确使用方法(mysql指定配置文件)
- MySQL 数据库之旅:从打开到运行(打开mysql)
- 查看MySQL表编码:快速查看方法(查看mysql表编码)
- 利用MySQL查询统计数量的小技巧(mysql查询并统计数量)
- MySQL操作:基础入门指南(mysql操作系统)
- MySQL命令格式:掌握关键要点(mysql命令格式)
- Ubuntu系统下安装MySQL数据库(ubuntu下安装mysql)
- 性能优化MySQL数据库1030性能优化之道(mysql数据库1030)
- MySQL查看数据库隔离级别(mysql查看隔离级别)
- 使用PHP与MySQL结合开发数据库应用(phpmysql结果集)
- MySQL事务管理:取得最佳结果的有效方式(mysql事务管理)
- 如何在MySQL数据库中使用全文索引(mysql数据库全文索引)
- 使用PHP操作MySQL数据库的基础——mysql类库(mysql类库php)
- MySQL数据库如何设置只读权限(mysql只读)
- 如何快速删除 MySQL 数据库表(删除mysql数据库表)
- MySQL成功生效,数据库管理得当(mysql生效)
- C语言美妙绝伦MySQL数据库分析与应用(c mysql数据库类)
- MySQL中如何使用A JOIN连接表(mysql中a jion)
- 探究MySQL两张表格的相似性如何比较和统计数据(mysql两表格的相似度)
- C语言与MySQL主键之间的魔力调和(c mysql主键)
- 2003年MySQL数据库启动之路(2003 mysql启动)
- 探析MySQL XS数据库高效存储与管理数据(mysql XS数据库)
- 学习MYSQL数据库技能,轻松掌握视频剪辑技巧(MYSQL下载视频剪辑)
- MySQL源码下载指南快速获得高质量数据库工具(mysql下载源码)
- 华为云将MySQL数据上云,更安全更高效(mysql上云华为云)