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 相关文章推荐
使用Django的模版来配合字符串翻译工作
Jul 27 Python
Python数据类型详解(二)列表
May 08 Python
python使用itchat库实现微信机器人(好友聊天、群聊天)
Jan 04 Python
Python实现PS图像抽象画风效果的方法
Jan 23 Python
python 3利用Dlib 19.7实现摄像头人脸检测特征点标定
Feb 26 Python
OpenCV 模板匹配
Jul 10 Python
Python三元运算与lambda表达式实例解析
Nov 30 Python
PyCharm 2019.3发布增加了新功能一览
Dec 08 Python
python爬虫---requests库的用法详解
Sep 28 Python
python3爬虫GIL修改多线程实例讲解
Nov 24 Python
pandas中DataFrame检测重复值的实现
May 26 Python
pycharm代码删除恢复的方法
Jun 26 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守护进程 加linux命令nohup实现任务每秒执行一次
2011/07/04 PHP
Codeigniter检测表单post数据的方法
2015/03/21 PHP
PHP闭包函数传参及使用外部变量的方法
2016/03/15 PHP
浅析PHP 中move_uploaded_file 上传中文文件名失败
2019/04/17 PHP
web的各种前端打印方法之jquery打印插件jqprint实现网页打印
2013/01/09 Javascript
jquery批量设置属性readonly和disabled的方法
2014/01/24 Javascript
JavaScript function 的 length 属性使用介绍
2014/09/15 Javascript
VS2008中使用JavaScript调用WebServices
2014/12/18 Javascript
jQuery处理图片加载失败的常用方法
2015/06/08 Javascript
使用AngularJS制作一个简单的RSS阅读器的教程
2015/06/18 Javascript
jquery实现可点击伸缩与展开的菜单效果代码
2015/08/31 Javascript
详解javascript事件冒泡
2016/01/09 Javascript
jquery自定义右键菜单、全选、不连续选择
2016/03/01 Javascript
JavaScript获取服务器端时间的方法
2016/11/29 Javascript
Vue form 表单提交+ajax异步请求+分页效果
2017/04/22 Javascript
利用Vue.js实现求职在线之职位查询功能
2017/07/03 Javascript
在一般处理程序(ashx)中弹出js提示语
2017/08/16 Javascript
jquery点击回车键实现登录效果并默认焦点的方法
2018/03/09 jQuery
nodejs中使用archive压缩文件的实现代码
2019/11/26 NodeJs
如何利用node.js开发一个生成逐帧动画的小工具
2019/12/01 Javascript
python里运用私有属性和方法总结
2019/07/08 Python
python3.7 的新特性详解
2019/07/25 Python
Python基础类继承重写实现原理解析
2020/04/03 Python
Python 实现将numpy中的nan和inf,nan替换成对应的均值
2020/06/08 Python
pandas apply多线程实现代码
2020/08/17 Python
如何利用Python 进行边缘检测
2020/10/14 Python
python中pop()函数的语法与实例
2020/12/01 Python
css3实现一个div设置多张背景图片及background-image属性实例演示
2017/08/10 HTML / CSS
老生常谈CSS中的长度单位
2016/06/27 HTML / CSS
关于解决iframe标签嵌套问题的解决方法
2020/03/04 HTML / CSS
AmazeUI中各种的导航式菜单与解决方法
2020/08/19 HTML / CSS
幼儿园社区活动总结
2014/07/07 职场文书
租房协议书
2014/09/12 职场文书
纪念九一八爱国演讲稿600字
2014/09/14 职场文书
企业党员个人自我评价
2014/09/20 职场文书
毕业季聚会祝酒词!
2019/07/04 职场文书