2012-02-25 14 views
48

Khi xây dựng dịch vụ Flask bằng Python và cài đặt chế độ gỡ lỗi, dịch vụ Flask sẽ khởi động hai lần. Khi khởi tạo tải cache và tương tự, điều này có thể mất một lúc. Phải làm điều này hai lần là gây phiền nhiễu khi trong chế độ phát triển (gỡ lỗi). Khi gỡ lỗi được tắt, dịch vụ Flask chỉ khởi tạo một lần.Làm thế nào để dừng Flask từ initialising hai lần trong Debug Mode?

Làm thế nào để dừng Flask từ khởi tạo hai lần trong Chế độ gỡ lỗi?

Trả lời

75

Điều đơn giản nhất để làm ở đây sẽ có thêm use_reloader=False lời kêu gọi của bạn để app.run - đó là: app.run(debug=True, use_reloader=False)

Ngoài ra, bạn có thể kiểm tra giá trị của WERKZEUG_RUN_MAIN trong môi trường:

if os.environ.get("WERKZEUG_RUN_MAIN") == "true": 
    # The reloader has already run - do what you want to do here 

Tuy nhiên, Condi tion là phức tạp hơn một chút khi bạn muốn hành vi để xảy ra bất cứ lúc nào trừ trong quá trình tải:

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

Làm cách nào để bạn vẫn có thể sử dụng trình tải lại nhưng có những thứ nhất định được khởi tạo chỉ một lần? – osa

+0

@osa - Tôi đã thêm giải thích ngắn gọn về giải pháp thay thế có thể cho phép bạn sử dụng trình tải lại –

+1

'use_reloader = False' hoạt động hoàn hảo cho tôi. – tmthyjames

17

Bạn có thể sử dụng before_first_request móc:

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

Cảm ơn alex nhưng nếu tôi đang làm nóng lên bộ nhớ cache hoặc thứ populating trước giống như một 'phân loại' này sẽ nhận được được gọi trước yêu cầu đầu tiên, đưa ra yêu cầu đầu tiên chậm hoặc khi khởi động dịch vụ bình. –

+4

Downvote. Khi ứng dụng tải lại, 'before_first_request' sẽ được gọi lại sau yêu cầu đầu tiên sau đó. – osa

Các vấn đề liên quan