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