Flask中的多線程和線程隔離


一、線程、進程

  1. 線程:cpu調度的基本單位。是進程的一部分,能夠訪問進程的資源,線程間的切換,資源消耗相對少。
  2. 進程:系統內存資源分配的基本單位。進程的切換需要保存應用的執行狀態(應用的上下文),相對於線程,進程切換的開銷大。

二、Flask開啟多線程、多進程

  1. flask自帶的服務器默認是單進程、單線程;
  2. 多線程:app.run(...., threader=True)
  3. 多進程:app.run(...., processes=1)

三、Flask多線程

  1. 單線程:request---->請求1 Request請求2 Request....。請求順序執行,request總是指向當前請求。
  2. 多線程:request---->{請求1 Request,請求2 Request....}。多線程的情況下,在某一時間多個請求會同時存在,此時不清楚request指向哪個請求,帶來的問題是造成數據的污染。解決的辦法是通過線程隔離,實現數據的獨立。

四、線程隔離

  1. 通過字典的思想實現線程隔離。線程的id作為keyRequest對象作為value
  2. Flask中通過第三方庫werkzeug中的local模塊Local對象實現線程隔離。
import threading    
import time

from werkzeug.local import Local

my_1 = Local()
my_1.b = 0

# 新線程中,b的值被修改
def worker():
    my_1.b = 1
    print(my_1.b)


new_t = threading.Thread(target=worker)
new_t.start()
time.sleep(1)

# 主線程中,b的值沒有改變
print(my_1.b)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM