最近遇到需要,需要定时清理数据库的过期数据,记录下处理过程
一、方案
- 使用time.sleep()
- 使用threading.Timer()
- APScheduler模块
方案1太消耗资源,而且Low
方案2适合只做一次的任务,循环执行比较复杂,容错率低
方案3会从系统底层帮助我们选用合适的工具,但不能利用flask的主线程
总结:
就是它了
二、代码示例
#! /usr/bin/env pythonfrom flask import Flaskfrom flask_apscheduler import APSchedulerimport timeclass 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,是阻塞型的,如果使用异步编程请不要使用