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

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

时间:2022-10-10 19:13:43浏览次数:102  
标签:task Flask 数据库 任务 APScheduler job scheduler mysql

前言

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)

标签:task,Flask,数据库,任务,APScheduler,job,scheduler,mysql
From: https://www.cnblogs.com/yoyoketang/p/16776831.html

相关文章

  • Navicat客户端因为版本问题连接不上mysql解决办法
    原因:新旧版本的密码加密方式不同解决办法:登录mysql中mysql-uroot-p1234usemysqlALTERUSER'root'@'localhost'IDENTIFIEDWITHmysq......
  • 服务器搭建(CenOS 7 Apache + PHP _Mysql环境(LAMP))
    服务器搭建(CenOS7Apache+PHP_Mysql环境(LAMP))第一步、更换阿里云yum源curl-o/etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo......
  • mysql CPU过高排查
    最近发现mysqlCPU使用率高,将排查步骤记录一下一、top命令找到PID为24319二、vmstat1查看一下CPU使用率三、pidstat-u查看一下CPU使用率​四、pidstat-t-p2431......
  • Mysql之主从复制原理
    1.主从复制步骤: 具体步骤:1、从库通过手工执行changemasterto语句连接主库,提供了连接的用户一切条件(user、password、port、ip),并且让从库知道,二进制日志的起点位置......
  • 【Ubuntu】mysql安装
    下载:https://dev.mysql.com/downloads/version:8.0.30sudpkg-imysql-connector-java_8.0.30-1ubuntu22.04_all.debapt-getupdateapt-getinstallmysql-servermysq......
  • Python-pymysql操作MySQL数据库
    一、安装pymysqlpy-mpipinstallpymysql;二、pymysql数据库操作1.简单示例#coding=utf-8importpymysql#打开数据库连接conn=pymysql.connect(host=......
  • Mysql:为什么使用索引以及索引的优缺点
    索引概述索引优缺点优点(1)是索引的关键,优点(3)和优点(4)其实是创建索引后顺带的福利。缺点(1)和(2)是小缺点,真正的大缺点是(3)。好比你在原本已经订好目录的书上再插入新的1页,意......
  • MySQL练习题2
    6,取得平均工资最高的部门的部门名称。selectd.dname,avg(e.sal)asavgsalfromempejoindeptdone.deptno=d.deptnogroupbyd.dnameorderbyavgsaldescli......
  • 备份 MySQL 的 shell 脚本(mysqldump版本) shell脚本
    #!/bin/bash#备份MySQL的shell脚本(mysqldump版本)#定义变量user(数据库用户名),passwd(数据库密码),date(备份的时间标签)#dbname(需要备份的数据库名称,......
  • 检测 MySQL 服务是否存活 shell脚本
    #!/bin/bash#检测MySQL服务是否存活#host为你需要检测的MySQL主机的IP地址,user为MySQL账户名,passwd为密码#这些信息需要根据实际情况修改后方可使......