flask排程任務
最近遇到需要,需要定時清理資料庫的過期資料,記錄下處理過程
一、方案
- 使用time.sleep()
- 使用threading.Timer()
- 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,是阻塞型的,如果使用非同步程式設計請不要使用