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通过exifread模块获得图片exif信息的方法
Mar 16 Python
详细讲解用Python发送SMTP邮件的教程
Apr 29 Python
浅谈Python数据类型判断及列表脚本操作
Nov 04 Python
浅谈python中copy和deepcopy中的区别
Oct 23 Python
python使用sqlite3时游标使用方法
Mar 13 Python
python3+PyQt5重新实现自定义数据拖放处理
Apr 19 Python
python3 flask实现文件上传功能
Mar 20 Python
python实现飞机大战游戏
Oct 26 Python
Mac安装python3的方法步骤
Aug 09 Python
Python decimal模块使用方法详解
Jun 08 Python
Python安装Bs4的多种方法
Nov 28 Python
python自动生成证件号的方法示例
Jan 14 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
使用MaxMind 根据IP地址对访问者定位
2006/10/09 PHP
php中ob(Output Buffer 输出缓冲)函数使用方法
2007/07/21 PHP
基于Zend的Config机制的应用分析
2013/05/02 PHP
php版本的cron定时任务执行器使用实例
2014/08/19 PHP
php基本函数汇总
2015/07/09 PHP
PHP实现的操作数组类库定义与用法示例
2019/05/24 PHP
php简单计算权重的方法示例【适合抽奖类应用】
2019/06/10 PHP
javascript中的document.open()方法使用介绍
2013/10/09 Javascript
JavaScript中使用Object.prototype.toString判断是否为数组
2015/04/01 Javascript
JavaScript iframe数据共享接口实现方法
2016/01/06 Javascript
Bootstrap模态对话框的简单使用
2016/04/29 Javascript
JavaScript判断微信浏览器实例代码
2016/06/13 Javascript
jquery mobile 实现自定义confirm确认框效果的简单实例
2016/06/17 Javascript
jquery Ajax实现Select动态添加数据
2017/06/08 jQuery
vue mint-ui 实现省市区街道4级联动示例(仿淘宝京东收货地址4级联动)
2017/10/16 Javascript
angularJs 表格添加删除修改查询方法
2018/02/27 Javascript
vue-router之nuxt动态路由设置的两种方法小结
2018/09/26 Javascript
详解vuex中action何时完成以及如何正确调用dispatch的思考
2019/01/21 Javascript
用Vue.js方法创建模板并使用多个模板合成
2019/06/28 Javascript
JSONP 的原理、理解 与 实例分析
2020/05/16 Javascript
[58:11]守擂赛第二周擂主赛 DeMonsTer vs Leopard
2020/04/28 DOTA
Python 深入理解yield
2008/09/06 Python
python的re模块应用实例
2014/09/26 Python
用Python制作简单的朴素基数估计器的教程
2015/04/01 Python
在RedHat系Linux上部署Python的Celery框架的教程
2015/04/07 Python
Python找出list中最常出现元素的方法
2016/06/14 Python
对Python正则匹配IP、Url、Mail的方法详解
2018/12/25 Python
Python3如何使用range函数替代xrange函数
2020/10/05 Python
Python如何急速下载第三方库详解
2020/11/02 Python
python实现磁盘日志清理的示例
2020/11/05 Python
西班牙最大的在线滑板和街头服饰商店:Fillow.net
2019/04/15 全球购物
会计应聘求职信范文
2013/12/17 职场文书
公务员试用期满考核材料
2014/05/22 职场文书
2014年工人工作总结
2014/11/25 职场文书
入党个人总结范文
2015/03/02 职场文书
撤诉申请书法院范本
2015/05/18 职场文书