flask调度任务

最近遇到需要,需要定时清理数据库的过期数据,记录下处理过程

一、方案

  1. 使用time.sleep()
  2. 使用threading.Timer()
  3. APScheduler模块

方案1太消耗资源,而且Low

方案2适合只做一次的任务,循环执行比较复杂,容错率低

方案3会从系统底层帮助我们选用合适的工具,但不能利用flask的主线程

总结:

就是它了

二、代码示例

#! /usr/bin/env python
from flask import Flask
from flask_apscheduler import APScheduler
import time


class Config:
    JOBS = [
        {
            'id': '111',              # 不重复的标识
            'func': '__main__:job_1',  # 定时执行的 模块:函数
            'trigger': 'cron',         # 定时执行,其他可选参数data,interval
            'hour': 16,                # 每天16:26分执行
            'minute': 26
        }
    ]


def job_1():  # 一个函数,用来做定时任务的任务。
    print(time.time())


app = Flask(__name__)
app.config.from_object(Config)


@app.route("/")
def test():
    return "hi"


if __name__ == '__main__':
    scheduler = APScheduler()
    scheduler.init_app(app)
    scheduler.start()
    app.run(debug=False)

三、注意事项

  • 需要scheduler.init_app(app),别忘记了
  • 调度器默认使用BackgroundScheduler,是阻塞型的,如果使用异步编程请不要使用

猜你喜欢

转载自www.cnblogs.com/igzh/p/9978326.html