淺談Flask 中的 執行緒區域性變數 request 原理
阿新 • • 發佈:2018-12-07
在多執行緒伺服器中客戶端每建立一個連結,伺服器就建立一個執行緒,每個執行緒中就會有一個request來表示客戶端的連結請求資訊。
不同的使用者訪問flask伺服器.都有自己的request.
使用者A------------執行緒A-------------> request
使用者B------------執行緒B-------------> request
from flask import request @app.route("/index") def index(): params = request.args.get() return "hello world"
執行緒區域性變數的本質是全域性變數 大概的實現方式>>>>>
request={ "執行緒A":{args,data,form...}, "執行緒B":{args,data,form...} # .................... }
Flask 隱藏了一個細節 執行緒A使用這段函式的時候(比如request.args),並不能直接操作 args,data.等等,
它先看這段程式碼當中執行到哪個執行緒,識別出這個執行緒,
從request當中根據當前這個執行緒的編號,把屬於這個執行緒的引數值拿出來.
雖然request還是一個全域性變數,但是在取值的時候,做了類似相對應的手腳(當然,flask的手腳並沒有這麼簡單,但是並不妨礙我們理解),實現了執行緒之間的隔離.