在Python中構建Flask服務並設置調試模式時,Flask服務將初始化兩次。當初始化加載緩存等時,這可能需要一段時間。在開發(調試)模式下,必須這樣做兩次會很煩人。當調試關閉時,Flask服務只會初始化一次。如何在調試模式下停止Flask初始化兩次?
如何在調試模式下停止Flask初始化兩次?
在Python中構建Flask服務並設置調試模式時,Flask服務將初始化兩次。當初始化加載緩存等時,這可能需要一段時間。在開發(調試)模式下,必須這樣做兩次會很煩人。當調試關閉時,Flask服務只會初始化一次。如何在調試模式下停止Flask初始化兩次?
如何在調試模式下停止Flask初始化兩次?
在這裏做最簡單的事情是添加use_reloader=False
您來電app.run
- 那就是:app.run(debug=True, use_reloader=False)
或者,你可以檢查在環境中的值爲WERKZEUG_RUN_MAIN
:
if os.environ.get("WERKZEUG_RUN_MAIN") == "true":
# The reloader has already run - do what you want to do here
但是,重刑是一個比較令人費解的,當你想要的行爲發生的任何時間除了在加載過程:
if not app.debug or os.environ.get("WERKZEUG_RUN_MAIN") == "true":
# The app is not in debug mode or we are in the reloaded process
可以使用before_first_request
鉤:
@app.before_first_request
def initialize():
print "Called only once, when the first request comes in"
感謝亞歷克斯,但如果我做高速緩存預熱或預填充的東西就像一個「分類」將在得到在第一個請求之前調用,使第一個請求變慢或啓動燒瓶服務。 – 2012-02-26 15:37:10
Downvote。當應用程序重新加載時,會在接下來的第一個請求之後再次調用'before_first_request'。 – osa 2014-10-04 22:23:47
你怎麼能仍然使用reloader但有一些東西只初始化一次? – osa 2014-10-04 22:21:59
@osa - 我添加了一個可能讓您使用reloader – 2014-10-04 22:56:08
'use_reloader = False'的完美替代方案。 – tmthyjames 2014-12-05 02:21:27