Python threading中lock的使用
阿新 • • 發佈:2021-07-30
# encoding=utf8 import threading import time lock = threading.Lock() l = [] def test1(n): lock.acquire() l.append(n) print(l) lock.release() def test(n): l.append(n) print(l) def main(): for i in range(0, 100): th = threading.Thread(target=test, args=(i,)) th.start()
在多執行緒中使用lock可以讓多個執行緒在共享資源的時候不會亂,例如程式碼中建立多個執行緒,每個執行緒都往空列表中新增一個數字並列印當前的列表,如果不加鎖(test函式沒有加鎖)可能會出現錯誤。因為每個執行緒都在同時往列表l中新增一個數字,然後又可能在同時列印列表l,所以最後的結果看起來會有一些混亂。如果給函式加鎖(test1函式加鎖),結果就會好很多。因為在test1中每次向列表l中新增數字並列印之前,都先加一把鎖,這樣可以保證每次只有一個執行緒可以往列表l中新增數字,而不是同時向列表l裡新增數字。
通過上面加鎖和不加鎖結果的比較可以知道,當多執行緒需要獨佔資源時,需要使用鎖來控制,防止多個執行緒同時佔用資源而出現其他異常。使用鎖的時候時候就呼叫acquire
原文連結:https://blog.csdn.net/u012067766/article/details/79733801