程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python使用線程本地數據及threading.local庫介紹

編輯:Python

1、如何使用線程本地數據?

    實際案例:

        我們實現了一個web視頻監控服務器,服務器端采集攝像頭數據,客戶端使用浏覽器通過http請求接收數據。服務器使用推送的方式(multipart/x-mixed-replace)一直使用一個tcp連接向客戶端傳遞數據。這種方式將持續占用一個線程,導致單線程服務器無法處理多客戶端請求。

        改寫程序,在每個線程中處理一個客戶端請求,支持多客戶端訪問。

  解決方案:

        threading.local函數可以創建線程本地數據空間,其下屬性對每個線程獨立存在,多個線程之間都是不干擾的。

2、代碼演示

        線程本地數據的簡單使用

import threading
# 創建線程的本地數據
l = threading.local()
# 對l任意添加一個屬性它都是線程的本地數據,
# x就是主線程的本地數據,其它線程訪問不到l下的x
l.x = 1
def f():
print(l.x)
# 在本線程調用x
f()
# 在子線程中運行f()
# threading.Thread(target=f).start()
# 可以看到拋出一個異常找不到x屬性,所有在子線程中使用l也是訪問不到x的。
# AttributeError: '_thread._local' object has no attribute 'x'
# 修改f(),讓他對進行l.x修改
def f2():
l.x = 5
# 啟動子線程運行f2
threading.Thread(target=f2).start()
# 在主線程中再訪問l.x,可以看到還是沒有改變還是1,說明每個線程x它是獨立的
print(l.x)


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved