如標題,
目前在測試Flask框架下,透過APScheduler定時執行任務,
Flask主程式跟APSceduler程式碼在同一個.py檔內,
並定時執行計數的工作,將計算值輸出到log.txt。
將scheduler.start()寫在 if name == "main" 內,
就無法正常執行定時任務,但可以正確路由到網址,
如果把scheduler.start()移出來,
則定時任務正常執行,但就變成不能正確由到網址。
不知道是不是一次只能有一個thread在運行? 不知道有沒有相關文件可參考?
若是的話,該如何解決呢?
以下是程式碼的部分:
from flask import Flask
from apscheduler.schedulers.blocking import BlockingScheduler
import logging
app = Flask(__name__)
#設定Logging 參數
logging.basicConfig(level=logging.WARNING, filename='./log.txt',
format='[%(asctime)s %(levelname)-8s] %(message)s',
datefmt='%Y%m%d %H:%M:%S',
)
#endregion
#時區設置
blockSched = BlockingScheduler(timezone="Asia/Taipei")
#region (測試用) APScheduler 用
initnum = 1
@blockSched.scheduled_job('interval', seconds=20)
def counter():
global initnum
total = initnum + 1
logging.error('計算: ' + str(total))
print(total)
initnum = total
#endregion
@app.route("/apstest")
def home():
return "Hello Flask"
#blockSched.add_job(counter, 'interval', seconds=10)
#==== blockSched.start(),在這裡可以正常執行定時任務 ===========
#==== 但就變成無法正常路由到 /apstest ===========
#blockSched.start()
if __name__ == "__main__":
#==== 可以正常路由到 /apstest ===========
#==== 但就無法正常執行定時任務 ===========
blockSched.start()
app.run()
使用 BackgroundScheduler,
我是使用 gunicorn + Flask-apscheduler 給你參考
To chunyenc大:
目前嘗試使用BackgroundScheduler已可正常執行!
感謝C大。
未來會持續開發加入Gunicorn!
https://viniciuschiele.github.io/flask-apscheduler/rst/tips.html
你可以參考這個,實際上他與 Flask 單獨引入 apscheduler 用法基本上一樣,因為我也在這個地方吃了蠻多苦頭的 .. QQ