2017-08-11 55 views
1

後,我有這個很基本的測試代碼:瓶API非常緩慢加入路由靜態文件

from flask import Flask, send_from_directory 

app = Flask(__name__, static_folder='react_app/build', static_path='') 

@app.route('/api/test') 
def test(): 
    return "Test" 

# Serve Website 
@app.route('/') 
def react_app(): 
    return send_from_directory('react_app/build', 'index.html') 

if __name__ == '__main__': 
    app.run(use_reloader=True) 

/api/test路線initialy工作,直到我重新載入頁面,比它要麼需要很長(60 +)或不根本不工作。有時,當我重新加載應用程序時,我收回之前未處理的請求。重新加載反應應用程序有時會解決問題,有時會再次導致問題,但我沒有真正發現任何破解/工作原則......但爲了讓它再次「工作」,我總是必須等待約1-2分鐘或重新啓動計算機。似乎錯誤會以某種方式「緩存」。你可能會說,我很難把這個問題指向特定的領域,甚至在任何時候都能清楚地描述併產生錯誤。 這是我曾嘗試:

  • 服務的反應,應用如圖所示的代碼,但使用的是測試的Node.js
    API =>一切正常,沒有任何問題
  • 服務的react-應用程序通過node.js,但使用顯示的Python代碼的API。它可以工作,如果我刪除#Server Website部分。否則我得到的描述錯誤
  • 陣營App和API通過提供Node.js的=>一切工作正常
  • 試圖服務的API,並與瓶的反應程序,但是有兩個不同的Python文件和兩個不同的端口= >同樣的問題,如果我會使用一個python文件

任何建議還有什麼我可以嘗試進一步固定錯誤源?

編輯:當清除cookie(例如,用於Chrome的「清除緩存」應用程序)時,當前掛起的請求神奇地通過...所以這實際上可能是反應應用程序的問題嗎?

回答

1

默認情況下,Flask.run運行不支持併發請求的原始文件socket server。這通常會造成像這樣的明顯鎖定。

使用run()threaded=True參數使它使用thread per request,這可以使它在面對併發請求時更健壯。

app.run(use_reloader=True, threaded=True) 
+1

另請注意,Flask socket服務器僅用於開發。其他用於生產的套接字服務器強烈建議。如果你不想自己編碼,請看Twisted或類似的東西。 –