1. 程式人生 > >flask應用中通過requests發起新請求時一直超時或假死

flask應用中通過requests發起新請求時一直超時或假死

問題描述

最近在開發過程中碰到一問題:
1. 後臺api介面已經寫好,通過postman可以正常訪問;
2. 開發前端頁面時,直接通過requests.post方法去呼叫後臺介面,將介面返回的資料在模組中渲染再返回給瀏覽器;
經過再三確認,程式正常,但就是瀏覽器在訪問時一起報超時或假死,不論將timeout設定為多久都一樣

解決方法

實在無法,於是將程式部署到伺服器上試試,伺服器是【Nginx + Gunicorn +Supervisor +Flask】構架,再一訪問,居然正常。
再一對比,開發時用的是flask自帶的伺服器,可能問題就出在伺服器設定上。一翻查詢後,開啟多執行緒支援後程序立馬就正常了。
啟動時帶上引數:runserver –threaded

原理

flask自帶的開發伺服器預設是不開啟多執行緒的,瀏覽器A請求時已經佔用了唯一的“執行緒”,而在這個請求中又通過requests.post發起了一個請求B,但此時已經沒有可用的“執行緒”了,於是出現了B在等待A釋放“執行緒”,A在等待B返回,於是一直卡死在那。