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动态监控日志内容的示例
Feb 16 Python
python实现猜数字游戏(无重复数字)示例分享
Mar 29 Python
Python struct模块解析
Jun 12 Python
浅谈numpy数组的几种排序方式
Dec 15 Python
利用Python在一个文件的头部插入数据的实例
May 02 Python
opencv与numpy的图像基本操作
Mar 08 Python
在Python函数中输入任意数量参数的实例
Jul 16 Python
基于Python解密仿射密码
Oct 21 Python
Django框架安装方法图文详解
Nov 04 Python
Pytorch Tensor基本数学运算详解
Dec 30 Python
Pandas替换及部分替换(replace)实现流程详解
Oct 12 Python
Python读写锁实现实现代码解析
Nov 28 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 discuz 主题表和回帖表的设计
2009/03/13 PHP
检测png图片是否完整的php代码
2010/09/06 PHP
PHP简洁函数小结
2011/08/12 PHP
Laravel中使用阿里云OSS Composer包分享
2015/02/10 PHP
php通过修改header强制图片下载的方法
2015/03/24 PHP
PHP实现mysqli批量执行多条语句的方法示例
2017/07/22 PHP
Yii支持多域名cors原理的实现
2018/12/05 PHP
js no-repeat写法 背景不重复
2009/03/18 Javascript
最短的javascript:地址栏载入脚本代码
2011/10/13 Javascript
js的Boolean对象初始值示例
2014/03/04 Javascript
jQuery循环滚动新闻列表示例代码
2014/06/17 Javascript
全面解析Bootstrap排版使用方法(标题)
2015/11/30 Javascript
详解Vue使用 vue-cli 搭建项目
2017/04/20 Javascript
详解JavaScript数组过滤相同元素的5种方法
2017/05/23 Javascript
vue2.0 自定义 饼状图 (Echarts)组件的方法
2018/03/02 Javascript
详解element-ui中form验证杂记
2019/03/04 Javascript
解决vue 子组件修改父组件传来的props值报错问题
2019/11/09 Javascript
Python动态加载模块的3种方法
2014/11/22 Python
Python编写生成验证码的脚本的教程
2015/05/04 Python
Perl中著名的Schwartzian转换问题解决实现
2015/06/02 Python
使用pygame模块编写贪吃蛇的实例讲解
2018/02/05 Python
详解tensorflow训练自己的数据集实现CNN图像分类
2018/02/07 Python
Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
2018/02/23 Python
Python实现打印实心和空心菱形
2019/11/23 Python
通过Canvas及File API缩放并上传图片完整示例
2013/08/08 HTML / CSS
国际政治个人自荐信范文
2013/11/26 职场文书
《真想变成大大的荷叶》教学反思
2014/04/14 职场文书
同学聚会策划方案
2014/06/06 职场文书
促销活动总结模板
2014/07/01 职场文书
2015年教师新年寄语
2014/12/08 职场文书
2015年售后服务工作总结
2015/04/25 职场文书
介绍信格式样本
2015/05/05 职场文书
交通事故责任认定书
2015/08/06 职场文书
python 爬取吉首大学网站成绩单
2021/06/02 Python
Python使用Beautiful Soup(BS4)库解析HTML和XML
2022/06/05 Python
CSS中理解层叠性及权重如何分配
2022/12/24 HTML / CSS