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从ftp下载数据保存实例
Nov 20 Python
在Python中操作字典之clear()方法的使用
May 21 Python
Python中的descriptor描述器简明使用指南
Jun 02 Python
Python 3.6 性能测试框架Locust安装及使用方法(详解)
Oct 11 Python
Python编程之Re模块下的函数介绍
Oct 28 Python
Python cookbook(数据结构与算法)筛选及提取序列中元素的方法
Mar 19 Python
Django Rest framework之权限的实现示例
Dec 17 Python
将python图片转为二进制文本的实例
Jan 24 Python
python读取图片的方式,以及将图片以三维数组的形式输出方法
Jul 03 Python
python 正则表达式参数替换实例详解
Jan 17 Python
python装饰器三种装饰模式的简单分析
Sep 04 Python
Python实现自动整理文件的脚本
Dec 17 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编码规范之注释和文件结构说明
2010/07/09 PHP
PHP独立Session数据库存储操作类分享
2014/06/11 PHP
js中几种去掉字串左右空格的方法
2006/12/25 Javascript
JavaScript 新手24条实用建议[TUTS+]
2009/06/21 Javascript
javascript预览上传图片发现的问题的解决方法
2010/11/25 Javascript
基于jquery的跟随屏幕滚动代码
2012/07/24 Javascript
js自动闭合html标签(自动补全html标记)
2012/10/04 Javascript
javascript中apply和call方法的作用及区别说明
2014/02/14 Javascript
浅谈Javascript事件对象
2017/02/05 Javascript
node.js express中app.param的用法详解
2017/07/16 Javascript
vue-cli项目如何使用vue-resource获取本地的json数据(模拟服务端返回数据)
2017/08/04 Javascript
React从react-router路由上做登陆验证控制的方法
2018/05/10 Javascript
vue自定义一个v-model的实现代码
2018/06/21 Javascript
JS实现的贪吃蛇游戏完整实例
2019/01/18 Javascript
如何为你的JS项目添加智能提示与类型检查详解
2019/03/12 Javascript
JavaScript实现多文件下载方法解析
2020/08/07 Javascript
微信小程序实现日历小功能
2020/11/18 Javascript
js观察者模式的弹幕案例
2020/11/23 Javascript
[49:11]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第二场 12.20
2020/12/23 DOTA
python实现壁纸批量下载代码实例
2018/01/25 Python
Python实现matplotlib显示中文的方法详解
2018/02/06 Python
tensorflow输出权重值和偏差的方法
2018/02/10 Python
python编写弹球游戏的实现代码
2018/03/12 Python
简单瞅瞅Python vars()内置函数的实现
2019/09/27 Python
解决PyCharm无法使用lxml库的问题(图解)
2020/12/22 Python
你不知道的葡萄干处理法、橙蜜处理法、二氧化碳酵母法
2021/03/17 冲泡冲煮
详解CSS3浏览器兼容
2016/12/14 HTML / CSS
Mytheresa中国官网:德国时尚奢侈品商城
2017/08/04 全球购物
GAP阿联酋官网:GAP UAE
2017/11/30 全球购物
优秀应届毕业生自荐信
2013/11/16 职场文书
演讲稿怎么写
2014/01/07 职场文书
法律进学校实施方案
2014/03/15 职场文书
学校安全防火方案
2014/06/07 职场文书
实习生个人总结范文
2015/02/28 职场文书
因工资原因离职的辞职信范文
2015/05/12 职场文书
vue+echarts实现多条折线图
2022/03/21 Vue.js