2012-02-25 66 views
48

在Python中構建Flask服務並設置調試模式時,Flask服務將初始化兩次。當初始化加載緩存等時,這可能需要一段時間。在開發(調試)模式下,必須這樣做兩次會很煩人。當調試關閉時,Flask服務只會初始化一次。如何在調試模式下停止Flask初始化兩次?

如何在調試模式下停止Flask初始化兩次?

回答

75

在這裏做最簡單的事情是添加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 
+0

你怎麼能仍然使用reloader但有一些東西只初始化一次? – osa 2014-10-04 22:21:59

+0

@osa - 我添加了一個可能讓您使用reloader – 2014-10-04 22:56:08

+1

'use_reloader = False'的完美替代方案。 – tmthyjames 2014-12-05 02:21:27

17

可以使用before_first_request鉤:

@app.before_first_request 
def initialize(): 
    print "Called only once, when the first request comes in" 
+2

感謝亞歷克斯,但如果我做高速緩存預熱或預填充的東西就像一個「分類」將在得到在第一個請求之前調用,使第一個請求變慢或啓動燒瓶服務。 – 2012-02-26 15:37:10

+4

Downvote。當應用程序重新加載時,會在接下來的第一個請求之後再次調用'before_first_request'。 – osa 2014-10-04 22:23:47

相關問題