定時任務沒有被多次調用,事實上如果多次調用的話,flask-apscheduler會拋出異常。
但一開始任務還是按時執行一次,重啟flask或者修改部分代碼后,就發送定時任務一次執行兩次了。
之所以會發生這種情況,是因為在debug模式下的Flask會生成一個子進程。
這樣每當代碼更改時,它就可以重新啟動該進程,新的子進程會初始化并啟動一個新的APScheduler,這就是為什么定時任務會執行兩次的原因。
需要設置debug=False,或者設置use_reloader=Flase
if __name__ == "__main__":app = create_app() app.run(debug=False, ...)
目前在flask-apscheduler中還沒有看到有效的解決方法。
個別方案是檢測當前進程是否是子進程,如果是則不允許APScheduler啟動。但這樣增加了額外操作了復雜度。
要么就不用flask-apscheduler模塊而改用其他沒有與flask集成的模塊,因為flask-apscheduler是flask對apscheduler的擴展支持。