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

一、方案

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

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

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

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

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

 

总结:

 flask调度任务 Python

就是它了

 

二、代码示例

#! /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,是阻塞型的,如果使用异步编程请不要使用

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄