1. 程式人生 > 其它 >Python threading中lock的使用

Python threading中lock的使用

# 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

()方法,告訴其他執行緒我正在佔用資源。使用完資源後釋放資源時候就呼叫release()方法,告訴其他執行緒,我已經使用完該資源,其他執行緒可以過來使用了。

原文連結:https://blog.csdn.net/u012067766/article/details/79733801