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正则表达式匹配ip地址实例
Oct 09 Python
python输出指定月份日历的方法
Apr 23 Python
从零开始学Python第八周:详解网络编程基础(socket)
Dec 14 Python
Python学习小技巧之列表项的排序
May 20 Python
Python读csv文件去掉一列后再写入新的文件实例
Dec 28 Python
使用Django启动命令行及执行脚本的方法
May 29 Python
python中使用iterrows()对dataframe进行遍历的实例
Jun 09 Python
Python列表常见操作详解(获取,增加,删除,修改,排序等)
Feb 18 Python
使用python的turtle绘画滑稽脸实例
Nov 21 Python
Django Admin后台添加数据库视图过程解析
Apr 01 Python
Python格式化输出--%s,%d,%f的代码解析
Apr 29 Python
pytorch训练神经网络爆内存的解决方案
May 22 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
Protoss建筑一览
2020/03/14 星际争霸
曾在DC漫画界反派角色扮演的演员,谁才是你心目中的小丑之王?
2020/04/09 欧美动漫
解析CI即CodeIgniter框架在Nginx下的重写规则
2013/06/03 PHP
php strnatcmp()函数的用法总结
2013/11/27 PHP
php5.3提示Function ereg() is deprecated Error问题解决方法
2014/11/12 PHP
PHP Web木马扫描器代码分享
2015/09/06 PHP
基于PHP实现用户注册登录功能
2016/10/14 PHP
php实现生成PDF文件的方法示例【基于FPDF类库】
2018/07/21 PHP
jquery 屏蔽一个区域内的所有元素,禁止输入
2009/10/22 Javascript
基于jquery实现的类似百度搜索的输入框自动完成功能
2011/08/23 Javascript
js 手机号码合法性验证代码集合
2012/09/29 Javascript
JQuery的自定义事件代码,触发,绑定简单实例
2013/08/01 Javascript
使用script的src实现跨域和类似ajax效果
2014/11/10 Javascript
js html5 css俄罗斯方块游戏再现
2016/10/17 Javascript
浅谈JavaScript的函数及作用域
2016/12/30 Javascript
jQuery实现链接的title快速出现的方法
2017/02/20 Javascript
Vue中封装input组件的实例详解
2017/10/17 Javascript
详解最新vue-cli 2.9.1的webpack存在问题
2017/12/16 Javascript
vue中$set的使用(结合在实际应用中遇到的坑)
2018/07/10 Javascript
微信小程序实现定位及到指定位置导航的示例代码
2019/08/20 Javascript
python实现百度关键词排名查询
2014/03/30 Python
Python中格式化format()方法详解
2017/04/01 Python
python 将字符串转换成字典dict的各种方式总结
2018/03/23 Python
windows10下python3.5 pip3安装图文教程
2018/04/02 Python
django页面跳转问题及注意事项
2019/07/18 Python
Python类和实例的属性机制原理详解
2020/03/21 Python
解决pyqt5异常退出无提示信息的问题
2020/04/08 Python
django日志默认打印request请求信息的方法示例
2020/05/17 Python
宝宝周岁宴答谢词
2014/01/26 职场文书
十佳护士获奖感言
2014/02/18 职场文书
建议书标准格式
2014/03/12 职场文书
房贷工资证明范本
2015/06/12 职场文书
《观潮》教学反思
2016/02/17 职场文书
7个关于Python的经典基础案例
2021/11/07 Python
Winsows11性能如何? win11性能测评多核竟比Win10差了10%
2021/11/21 数码科技
MySQL数据库如何查看表占用空间大小
2022/06/10 MySQL