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简单进程锁代码实例
Apr 27 Python
为Python的Tornado框架配置使用Jinja2模板引擎的方法
Jun 30 Python
matplotlib设置legend图例代码示例
Dec 19 Python
python如何拆分含有多种分隔符的字符串
Mar 20 Python
python编写暴力破解zip文档程序的实例讲解
Apr 24 Python
DES加密解密算法之python实现版(图文并茂)
Dec 06 Python
python 将大文件切分为多个小文件的实例
Jan 14 Python
解决python -m pip install --upgrade pip 升级不成功问题
Mar 05 Python
Python学习笔记之装饰器
Aug 06 Python
python 使用cycle构造无限循环迭代器
Dec 02 Python
Python Pycharm虚拟下百度飞浆PaddleX安装报错问题及处理方法(亲测100%有效)
May 24 Python
一文搞懂Python Sklearn库使用
Aug 23 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
win7系统配置php+Apache+mysql环境的方法
2015/08/21 PHP
Mootools 1.2教程 排序类和方法简介
2009/09/15 Javascript
jQuery UI AutoComplete 自动完成使用小记
2010/08/21 Javascript
两个多选select(multiple左右)添加、删除选项和取值实例
2014/05/12 Javascript
javascript动态判断html元素并执行不同的操作
2014/06/16 Javascript
使用Chart.js图表库制作漂亮的响应式表单
2015/10/28 Javascript
js实现图片淡入淡出切换简易效果
2016/08/22 Javascript
jquery注册文本框获取焦点清空,失去焦点赋值的简单实例
2016/09/08 Javascript
JS获取多维数组中相同键的值实现方法示例
2017/01/06 Javascript
jQuery插件echarts实现的多柱子柱状图效果示例【附demo源码下载】
2017/03/04 Javascript
layer弹出框确定前验证:弹出消息框的方法(弹出两个layer)
2019/09/21 Javascript
[01:06:54]DOTA2-DPC中国联赛 正赛 SAG vs DLG BO3 第二场 2月28日
2021/03/11 DOTA
Python实现的多线程端口扫描工具分享
2015/01/21 Python
python检测远程服务器tcp端口的方法
2015/03/14 Python
python实现搜索本地文件信息写入文件的方法
2016/02/22 Python
Python实现时钟显示效果思路详解
2018/04/11 Python
python实现事件驱动
2018/11/21 Python
详解Python中的format格式化函数的使用方法
2019/11/20 Python
Python Numpy,mask图像的生成详解
2020/02/19 Python
实例代码讲解Python 线程池
2020/08/24 Python
Python使用pickle进行序列化和反序列化的示例代码
2020/09/22 Python
python Scrapy框架原理解析
2021/01/04 Python
css3和jquery实现的可折叠导航菜单适合放在手机网页的导航菜单
2014/09/02 HTML / CSS
css3边框_动力节点Java学院整理
2017/07/11 HTML / CSS
CSS3实现背景透明文字不透明的示例代码
2018/06/25 HTML / CSS
荷兰牛仔裤网上商店:Jeans Centre
2018/04/03 全球购物
请说出几个常用的异常类
2013/01/08 面试题
房地产融资计划书
2014/01/10 职场文书
2014的自我评价
2014/01/13 职场文书
路政管理毕业自荐书范文
2014/02/10 职场文书
端午节活动策划方案
2014/03/09 职场文书
授权委托书范文
2014/07/31 职场文书
营销学习心得体会
2014/09/12 职场文书
电子银行业务授权委托书
2014/10/10 职场文书
2014年党建工作汇报材料
2014/11/02 职场文书
Python获取字典中某个key的value
2022/04/13 Python