python使用锁访问共享变量实例解析

 更新时间:2018年02月08日 15:34:14   作者:零丁若叹   我要评论
这篇文章主要介绍了python使用锁访问共享变量实例解析,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下

本文研究的主要是python使用锁访问共享变量,具体介绍和实现如下。

python 做多线程编程时,多个线程若同时访问某个变量,可能会对变量数据造成破坏,pyhon中的threading模块提供了lock对象,lock中的acquire方法用于获取一个锁,而release用于释放一个锁。当一个线程取得锁时,它变获得了共享变量的访问权,此时进入阻塞状态,若其它线程申请访问这个变量,则必须等到这个线程调用release方法释放这个锁。下面是python中使用锁的实例:

#!/usr/bin/env python 
import threading,time 
q=threading.Lock()  #create a lock object 
def mythread(): 
  global a 
  q.acquire()   #acquire the lock 
  a=threading.currentThread().getName() 
  print "a is modified by",a 
  q.release()   #release the lock 
for i in range(1,4): 
  t=threading.Thread(target=mythread,name="Thread %d"%i) 
  t.start() 

如果一个线程想多次获取资源访问权,在上面的程序中连续两次使用acquire() ,将会造成死锁现象,因为第一次申请到的资源还没有来得及释放,就进行了第二次申请。python中的threading模块提供了可重入锁RLock,RLock提供了计数器。一个线程申请到某个资源,计数器会加1,释放掉这个资源计数器会减1.这样,一个线程可以多次请求同一个资源,在所有请求都被释放后,其它线程才允许获取这个锁。上面的代码做简单修改,可得:

#!/usr/bin/env python 
import threading,time 
q=threading.RLock()    #create a lock object 
def mythread(): 
  global a 
  q.acquire()    #acquire the lock 
  a=threading.currentThread().getName() 
  print "a is modified by",a 
  q.acquire() 
  a=threading.currentThread().getName() 
  print "a is modified by %s the second time"% a 
  q.release()    
  q.release()    #release the lock 
for i in range(1,4): 
  t=threading.Thread(target=mythread,name="Thread %d"%i) 
  t.start() 

总结

以上就是本文关于python使用锁访问共享变量实例解析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

相关文章

  • 原生python实现knn分类算法

    原生python实现knn分类算法

    这篇文章主要介绍了原生python实现knn分类算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • Python实现从URL地址提取文件名的方法

    Python实现从URL地址提取文件名的方法

    这篇文章主要介绍了Python实现从URL地址提取文件名的方法,涉及OS模块中basename方法的使用技巧,需要的朋友可以参考下
    2015-05-05
  • 举例讲解Python中is和id的用法

    举例讲解Python中is和id的用法

    这篇文章主要介绍了举例讲解Python中is和id的用法,是Python学习当中的基础知识,作者举例进行了简单说明,需要的朋友可以参考下
    2015-04-04
  • Python发送邮件的实例代码讲解

    Python发送邮件的实例代码讲解

    在本篇文章里小编给大家整理的是关于Python发送邮件的实例代码讲解内容,需要的朋友们可以参考下。
    2019-10-10
  • pyramid配置session的方法教程

    pyramid配置session的方法教程

    这篇文章主要介绍了pyramid如何配置session,大家可以参考使用
    2013-11-11
  • 浅谈python函数之作用域(python3.5)

    浅谈python函数之作用域(python3.5)

    下面小编就为大家带来一篇浅谈python函数之作用域(python3.5)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • 对于Python的Django框架使用的一些实用建议

    对于Python的Django框架使用的一些实用建议

    这篇文章主要介绍了对于Python的Django框架使用的一些实用建议,包括一些优秀模块的介绍,要的朋友可以参考下
    2015-04-04
  • Python中的高级数据结构详解

    Python中的高级数据结构详解

    这篇文章主要介绍了Python中的高级数据结构详解,本文讲解了Collection、Array、Heapq、Bisect、Weakref、Copy以及Pprint这些数据结构的用法,需要的朋友可以参考下
    2015-03-03
  • 使用NumPy和pandas对CSV文件进行写操作的实例

    使用NumPy和pandas对CSV文件进行写操作的实例

    今天小编就为大家分享一篇使用NumPy和pandas对CSV文件进行写操作的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • Python饼状图的绘制实例

    Python饼状图的绘制实例

    今天小编就为大家分享一篇关于Python饼状图的绘制实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01

最新评论