import threading
import time
number =
0def
plus()
:global number # global宣告此處的number是外面的全域性變數number
for _ in
range
(1000000):
# 進行乙個大數級別的迴圈加一運算
number +=
1print
("子執行緒%s運算結束後,number = %s"
%(threading.current_thread(
).getname(
), number)
)for i in
range(2
):# 用2個子執行緒,就可以觀察到髒資料
t = threading.thread(target=plus)
t.start(
)time.sleep(2)
# 等待2秒,確保2個子執行緒都已經結束運算。
print
("主線程執行完畢後,number = "
, number)
結果每次不一樣。
子執行緒thread-
2運算結束後,number =
1144974
子執行緒thread-
1運算結束後,number =
1181608
主線程執行完畢後,number =
1181608
原文中做法很多,我用了互斥鎖的方法,很好用。
import threading
import time
number =
0lock = threading.lock(
)def
plus
(lk)
:global number # global宣告此處的number是外面的全域性變數number
lk.acquire(
)# 開始加鎖
for _ in
range
(1000000):
# 進行乙個大數級別的迴圈加一運算
number +=
1print
("子執行緒%s運算結束後,number = %s"
%(threading.current_thread(
).getname(
), number)
) lk.release(
)# 釋放鎖,讓別的執行緒也可以訪問number
if __name__ ==
'__main__'
:for i in
range(2
):# 用2個子執行緒,就可以觀察到髒資料
t = threading.thread(target=plus, args=
(lock,))
# 需要把鎖當做引數傳遞給plus函式
t.start(
) time.sleep(2)
# 等待2秒,確保2個子執行緒都已經結束運算。
print
("主線程執行完畢後,number = "
, number)
問題解決。 Python多執行緒程式設計之多執行緒加鎖
python語言本身是支援多執行緒的,不像php語言。下面的例子是多個執行緒做同一批任務,任務總是有task num個,每次執行緒做乙個任務 print 做完後繼續取任務,直到所有任務完成為止。1 coding utf 8 2import threading 34 start task 0 5 ta...
python 多執行緒 thread 加鎖(二)
thread.start new thread function,args kwargs 函式原型,其中function引數是你將要呼叫的執行緒函式名稱沒有括號 args是講傳遞給你的執行緒函式的引數,他必須是個tuple型別 而kwargs是可選的引數,如果沒有引數,也一定是 import thr...
多執行緒程式何時需要加鎖
簡單的說三條 多人讀,不需要 一讀一寫要加 多人寫要加 常見錯誤 1讀1寫沒事,讀寫的記憶體約多,越容易出事,因為不是原子操作 對int int64 char型是原子操作,可不加鎖,其實沒人保證這一點的,要不c 1x還出個原子模板類幹什麼 常用例項 vector的操作是安全的,如乙個執行緒裡 buf...