python的threading模块如何使用?threading模块的类Lock的基本使用方法

在多线程应用中,某个资源同时被多个线程共享访问,如何让线程通过使用来锁定占用独立的资源呢?而python中的threading模块就能很好的对它进行操作,而且它包含了一个强大的lock类可以进行使用,下面让我们一起来学习一下有关“python的threading模块如何使用?threading模块的类Lock的基本使用方法”的内容吧!

python的threading模块如何使用?threading模块的类Lock的基本使用方法


在某些时候,需要通过使用线程中的独立锁来占用资源,私自访问的原因可能是因为在线程使用打印机的时候,不需要其他的线程向次打印机输出,又或者是线程在爱对变量进行读取访问时,不允许其他的线程一起访问,也就是说不可以共享一个变量 。
为了解决这个问题python中的threading模块,就可以很好利用起来了了,类Lock它提供了两种方法,方法如下:
acquire()这种方法的功能就是获得一个锁,如果这个锁是空的它就会立刻返回,如果这个锁被其他线程占用,它会在一旁等待 。
release()这个方法是用来释放锁的线程 。
【python的threading模块如何使用?threading模块的类Lock的基本使用方法】使用线程占用一个资源之前,我们需要调用lock.acquire()方法,使用完毕之后,再调用lock.release()方法,示例代码如下:
lock = threading.Lock()lock.acquire()独占访问某个资源
lock.release()lock还有一个作用,它可以防止数据竞争 。
什么是数据竞争,就是当一个线程在对读写一个共享变量的时候,可能会依赖于执行线程的顺序,这种情况就叫数据竞争 。我们可以使用lock来防止这种情况是出现,使用方法如下:
import threadingsum = 0t = 0def thread_entry():    global sum, t    for i in range(100 * 100):        lock.acquire()  # 获取锁        t = sum + 1        sum = t        lock.release()  # 释放锁lock = threading.Lock() # 初始化锁h1= threading.Thread(target = thread_entry, args = ())h2 = threading.Thread(target = thread_entry, args = ())h1.start()h2.start()h1.join()h2.join()print('sum =', sum)在上面的代码中,使用lock.acquire()和lock.release()来访问共享变量sum和t,前者是用来获取锁,后者是用来释放锁,使用lock = thread.Lock()是来对一个锁进行初始化,最后程序运行了两次,结果如下:
第一次运行:
sum=20000第二次运行:
sum=20000线程h1和h2对sum各自递增 100 * 100次
关于“python的threading模块如何使用?threading模块的类Lock的基本使用方法”就介绍到这里了,如果你还有其他疑惑可以继续关注学习哦!

    猜你喜欢