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


Posted in Python onFebruary 08, 2018

本文研究的主要是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通过socket查询whois的方法
Jul 18 Python
黑科技 Python脚本帮你找出微信上删除你好友的人
Jan 07 Python
Python 3.x 连接数据库示例(pymysql 方式)
Jan 19 Python
python 专题九 Mysql数据库编程基础知识
Mar 16 Python
python+opencv实现的简单人脸识别代码示例
Nov 14 Python
python web基础之加载静态文件实例
Mar 20 Python
python3将视频流保存为本地视频文件
Jun 20 Python
python flask几分钟实现web服务的例子
Jul 26 Python
Django 自定义分页器的实现代码
Nov 24 Python
Python字典深浅拷贝与循环方式方法详解
Feb 09 Python
Pyqt5 关于流式布局和滚动条的综合使用示例代码
Mar 24 Python
python SOCKET编程基础入门
Feb 27 Python
Python异常对代码运行性能的影响实例解析
Feb 08 #Python
Python科学计算包numpy用法实例详解
Feb 08 #Python
Python多进程并发与多线程并发编程实例总结
Feb 08 #Python
Python的CGIHTTPServer交互实现详解
Feb 08 #Python
Python获取CPU、内存使用率以及网络使用状态代码
Feb 08 #Python
python实现二叉查找树实例代码
Feb 08 #Python
单链表反转python实现代码示例
Feb 08 #Python
You might like
PHP入门经历和学习过程分享
2014/04/11 PHP
PHP实现多图片上传类实例
2014/07/26 PHP
php获取数据库中数据的实现方法
2017/06/01 PHP
网页开发中的容易忽略的问题 javascript HTML中的table
2009/04/15 Javascript
javawscript 三级菜单的实现原理
2009/07/01 Javascript
利用JS自动打开页面上链接的实现代码
2011/09/25 Javascript
JS判断数组中是否有重复值得三种实用方法
2013/08/16 Javascript
把jQuery的类、插件封装成seajs的模块的方法
2014/03/12 Javascript
JavaSacript中charCodeAt()方法的使用详解
2015/06/05 Javascript
JQuery插入DOM节点的方法
2015/06/11 Javascript
JavaScript代码判断点击第几个按钮
2015/12/13 Javascript
JavaScript类型系统之正则表达式
2016/01/05 Javascript
关于js原型的面试题讲解
2016/09/25 Javascript
JS文件上传神器bootstrap fileinput详解
2021/01/28 Javascript
AngularJS 实现点击按钮获取验证码功能实例代码
2017/07/13 Javascript
详解封装基础的angular4的request请求方法
2018/06/05 Javascript
详解滑动穿透(锁body)终极探索
2019/04/16 Javascript
uni-app使用微信小程序云函数的步骤示例
2020/05/22 Javascript
微信小程序动态评分展示/五角星展示/半颗星展示/自定义长度展示功能的实现
2020/07/22 Javascript
jQuery实现放大镜案例
2020/10/19 jQuery
Python比较文件夹比另一同名文件夹多出的文件并复制出来的方法
2015/03/05 Python
Python使用poplib模块和smtplib模块收发电子邮件的教程
2016/07/02 Python
让Django支持Sql Server作后端数据库的方法
2018/05/29 Python
Python txt文件加入字典并查询的方法
2019/01/15 Python
python 用户交互输入input的4种用法详解
2019/09/24 Python
python使用html2text库实现从HTML转markdown的方法详解
2020/02/21 Python
俄罗斯名牌服装网上商店:UNIQUE FABRIC
2019/07/25 全球购物
经典婚礼主持开场白
2014/03/13 职场文书
安全生产计划书
2014/05/04 职场文书
煤矿安全协议书
2014/08/20 职场文书
租房协议书范文
2014/08/20 职场文书
学校法制宣传日活动总结
2014/11/01 职场文书
2014年语文教师工作总结
2014/12/18 职场文书
小学同学聚会感言
2015/07/30 职场文书
五年级语文教学反思
2016/03/03 职场文书
MyBatis自定义SQL拦截器示例详解
2021/10/24 Java/Android