您好,登錄后才能下訂單哦!
import threading
import time
def worker():
x = 0
for i in range(100):
time.sleep(0.0001)
x += 1
print(threading.current_thread(), x)
for i in range(3):
threading.Thread(target=worker).start()
class A:
def __init__(self):
self.x = 0
def worker():
global_data.x = 0
for i in range(100):
time.sleep(0.0001)
global_data.x += 1
print(threading.current_thread(), global_data.x)
for i in range(3):
threading.Thread(target=worker).start()
# 測試發現結果不是我們期望的那樣
將全局變量,變換成線程的局部變量
global_data = threading.local()
def worker():
global_data.x = 0
for i in range(100):
time.sleep(0.0001)
# x += 1
global_data.x += 1
print(threading.current_thread(), global_data.x)
for i in range(3):
threading.Thread(target=worker).start()
X = 'abc'
ctx = threading.local()
ctx.x = 123 # 留意下這一句
print(ctx, type(ctx), ctx.x)
def worker():
print(X)
print(ctx)
# ctx.x = '11111' # 注釋掉這一行,會報錯。去掉注釋在執行一次
print(ctx.x)
print('working')
worker()
print('========')
threading.Thread(target=worker).start()
# 第三行,因為這個變量在定義的時候是在當前線程下,而threading.local是不能跨線程的
# 所以在啟子線程的時候,重新訪問這個變量的時候會拋出異常
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。