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

posted @ 2021-07-30 11:02  呆贝斯  阅读(238)  评论(0编辑  收藏  举报