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实现优先级队列结构的方法详解
Jun 02 Python
python 创建弹出式菜单的实现代码
Jul 11 Python
python flask中静态文件的管理方法
Mar 20 Python
python如何为创建大量实例节省内存
Mar 20 Python
修改python plot折线图的坐标轴刻度方法
Dec 13 Python
对Python 语音识别框架详解
Dec 24 Python
Python实战之制作天气查询软件
May 14 Python
Pycharm如何运行.py文件的方法步骤
Mar 03 Python
Jupyter notebook 远程配置及SSL加密教程
Apr 14 Python
python中线程和进程有何区别
Jun 17 Python
Python3+Flask安装使用教程详解
Feb 16 Python
Python中Permission denied的解决方案
Apr 02 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
建立动态的WML站点(二)
2006/10/09 PHP
文件系统基本操作类
2006/11/23 PHP
PHP动态输出JavaScript代码实例
2015/02/12 PHP
基于php的微信公众平台开发入门实例
2015/04/15 PHP
nginx下安装php7+php5
2016/07/31 PHP
使用vs code编辑调试php配置的方法
2019/01/29 PHP
javascript之dhDataGrid Ver2.0.0代码
2007/07/01 Javascript
javascript中length属性的探索
2011/07/31 Javascript
利用window.name实现windowStorage代码分享
2014/01/02 Javascript
JavaScript中对象property的读取和写入方法介绍
2014/12/30 Javascript
jQuery EasyUI提交表单验证
2016/07/19 Javascript
AngularJs入门教程之环境搭建+创建应用示例
2016/11/01 Javascript
微信小程序实现给循环列表添加点击样式实例
2017/04/26 Javascript
JavaScript实现多叉树的递归遍历和非递归遍历算法操作示例
2018/02/08 Javascript
浅谈webpack 自动刷新与解析
2018/04/09 Javascript
angularJs select绑定的model取不到值的解决方法
2018/10/08 Javascript
[01:00:14]DOTA2官方TI8总决赛纪录片 真视界True Sight
2019/01/16 DOTA
简单讲解Python中的闭包
2015/08/11 Python
Python实现代码统计工具(终极篇)
2016/07/04 Python
利用Python自带PIL库扩展图片大小给图片加文字描述的方法示例
2017/08/08 Python
Python读取文件内容的三种常用方式及效率比较
2017/10/07 Python
Django获取该数据的上一条和下一条方法
2019/08/12 Python
详解从Django Allauth中进行登录改造小结
2019/12/18 Python
python日志通过不同的等级打印不同的颜色(示例代码)
2021/01/13 Python
使用CSS3实现圆角,阴影,透明
2014/12/23 HTML / CSS
Cotton On美国网站:澳洲时装连锁品牌
2016/10/25 全球购物
尤妮佳moony海外旗舰店:日本殿堂级纸尿裤品牌
2018/02/23 全球购物
美味咖啡的顶级烘焙师:Cafe Britt
2018/03/15 全球购物
批评与自我批评材料
2014/02/15 职场文书
学校班班通实施方案
2014/06/11 职场文书
工资收入证明样本(5篇)
2014/09/16 职场文书
离婚起诉书范本
2015/05/18 职场文书
婚礼伴郎致辞
2015/07/28 职场文书
关于实现中国梦的心得体会
2016/01/05 职场文书
2019年图书室自查报告范本
2019/10/12 职场文书
SQL Server实现分页方法介绍
2022/03/16 SQL Server