python使用锁访问共享变量实例解析
2018-02-08 15:34
676 查看
本文研究的主要是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使用锁访问共享变量
- Python中使用HTMLParser解析html实例
- java多线程的共享变量访问控制实例
- linux 下 rpc python 实例之使用XML-RPC进行远程文件共享
- Python使用PDFMiner解析PDF代码实例
- Python 中特殊变量/方法命名规则说明(特别是私有变量)及使用实例
- Python中使用ConfigParser解析ini配置文件实例
- python多进程共享变量Value使用tips
- python变量总结: 全局变量、局部变量、类变量、实例变量以及global和nonlocal关键字的使用示例
- linux 下 rpc python 实例之使用XML-RPC进行远程文件共享
- python使用json序列化datetime类型实例解析
- 在web.xml定义,在网页中使用变量实例 使用只有创建变量的servlet才可以访问的<init-param>方式 附带登陆和跳转实现
- spark 2.2.0 共享变量使用方法 python版
- python多线程共享变量的使用和效率
- Python中使用HTMLParser解析html实例
- Python命令行参数解析模块optparse使用实例
- 【python】解析Excel中使用xlrd库、xlwt库操作,读取excel进阶完整脚本实例(四)
- 解析使用C# lock同时访问共享数据
- python:线程的使用、线程共享全局变量、列表作为参数(全局变量)、避免全局变量被修改
- Python 中特殊变量/方法命名规则说明(特别是私有变量)及使用实例