对python多线程中互斥锁Threading.Lock的简单应用详解


Posted in Python onJanuary 11, 2019

一、线程共享进程资源

每个线程互相独立,相互之间没有任何关系,但是在同一个进程中的资源,线程是共享的,如果不进行资源的合理分配,对数据造成破坏,使得线程运行的结果不可预期。这种现象称为“线程不安全”。

实例如下:

#-*- coding: utf-8 -*-
import threading
import time
 
def test_xc():
  f = open("test.txt","a")
  f.write("test_dxc"+'\n')
  time.sleep(1)
  f.close()
 
if __name__ == '__main__':
  for i in xrange(5):
    t = threading.Thread(target=test_xc)
    t.start()

结果展示:

对python多线程中互斥锁Threading.Lock的简单应用详解

二、互斥锁同步

线程同步能够保证多个线程安全访问竞争资源,最简单的同步机制是引入互斥锁。互斥锁为资源引入一个状态:锁定/非锁定。某个线程要更改共享数据时,先将其锁定,此时资源的状态为“锁定”,其他线程不能更改;直到该线程释放资源,将资源的状态变成“非锁定”,其他的线程才能再次锁定该资源。互斥锁保证了每次只有一个线程进行写入操作,从而保证了多线程情况下数据的正确性。

threading模块中定义了Lock类,可以方便的处理锁定:

#创建锁
mutex = threading.Lock()
#锁定
mutex.acquire([timeout])#timeout是超时时间
#释放
mutex.release()

其中,锁定方法acquire可以有一个超时时间的可选参数timeout。如果设定了timeout,则在超时后通过返回值可以判断是否得到了锁,从而可以进行一些其他的处理。

三、使用线程锁

<pre name="code" class="python">#-*- coding: utf-8 -*-
import threading
import time
 
def test_xc():
  f = open("test.txt","a")
  f.write("test_dxc"+'\n')
  time.sleep(1)
  mutex.acquire()#取得锁
  f.close()
  mutex.release()#释放锁
 
if __name__ == '__main__':
  mutex = threading.Lock()#创建锁
  for i in xrange(5):
    t = threading.Thread(target=test_xc)
    t.start()

运行结果

对python多线程中互斥锁Threading.Lock的简单应用详解

以上这篇对python多线程中互斥锁Threading.Lock的简单应用详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
浅析Python中将单词首字母大写的capitalize()方法
May 18 Python
python+matplotlib实现动态绘制图片实例代码(交互式绘图)
Jan 20 Python
Python模拟随机游走图形效果示例
Feb 06 Python
python dataframe 输出结果整行显示的方法
Jun 14 Python
对python GUI实现完美进度条的示例详解
Dec 13 Python
Python Web版语音合成实例详解
Jul 16 Python
Python爬取视频(其实是一篇福利)过程解析
Aug 01 Python
Python hashlib加密模块常用方法解析
Dec 18 Python
为什么相对PHP黑python的更少
Jun 21 Python
Python 串口通信的实现
Sep 29 Python
python实现马丁策略的实例详解
Jan 15 Python
关于Python OS模块常用文件/目录函数详解
Jul 01 Python
pyqt5实现俄罗斯方块游戏
Jan 11 #Python
python之线程通过信号pyqtSignal刷新ui的方法
Jan 11 #Python
对python多线程中Lock()与RLock()锁详解
Jan 11 #Python
浅谈Python 多进程默认不能共享全局变量的问题
Jan 11 #Python
Python设计模式之组合模式原理与用法实例分析
Jan 11 #Python
python通过配置文件共享全局变量的实例
Jan 11 #Python
Python设计模式之命令模式原理与用法实例分析
Jan 11 #Python
You might like
国产动画《伍六七》原声大碟大卖,啊哈娱乐引领音乐赋能IP的新尝试
2020/03/08 国漫
利用递归把多维数组转为一维数组的函数
2006/10/09 PHP
用php实现像JSP,ASP里Application那样的全局变量
2007/01/12 PHP
PHP截取汉字乱码问题解决方法mb_substr函数的应用
2008/03/30 PHP
用PHP实现 上一篇、下一篇的代码
2012/09/29 PHP
PHP实现的猴王算法(猴子选大王)示例
2018/04/30 PHP
漂亮的widgets,支持换肤和后期开发新皮肤(2007-4-27已更新1.7alpha)
2007/04/27 Javascript
使用JQUERY Tabs插件宿主IFRAMES
2010/01/01 Javascript
点弹代码 点击页面任何位置都可以弹出页面效果代码
2012/09/17 Javascript
JQuery分别取得每行最后一列和最后一行的示例代码
2013/08/18 Javascript
js取消单选按钮选中示例代码
2013/11/14 Javascript
从数组中随机取x条不重复数据的JS代码
2013/12/24 Javascript
JavaScript分析、压缩工具JavaScript Analyser
2014/12/31 Javascript
JQuery显示、隐藏div的几种方法简明总结
2015/04/16 Javascript
avalonjs实现仿微博的图片拖动特效
2015/05/06 Javascript
jquery UI Datepicker时间控件的使用方法(终结版)
2015/11/07 Javascript
原生JavaScript实现瀑布流布局
2020/06/28 Javascript
JS中位置与大小的获取方法
2016/11/22 Javascript
详解Nodejs get获取远程服务器接口数据
2019/03/26 NodeJs
js利用递归与promise 按顺序请求数据的方法
2019/08/30 Javascript
layui表格 列自动适应大小失效的解决方法
2019/09/06 Javascript
js中console在一行内打印字符串和对象的方法
2019/09/10 Javascript
如何在JavaScript中等分数组的实现
2020/12/13 Javascript
[49:08]Secret vs VP 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
跟老齐学Python之用Python计算
2014/09/12 Python
用Python代码来解图片迷宫的方法整理
2015/04/02 Python
Python实现重建二叉树的三种方法详解
2018/06/23 Python
Python OpenCV实现鼠标画框效果
2020/08/19 Python
Python PyPDF2模块安装使用解析
2020/01/19 Python
使用Python防止SQL注入攻击的实现示例
2020/05/21 Python
python实现xlwt xlrd 指定条件给excel行添加颜色
2020/07/14 Python
《乞巧》教学反思
2014/02/27 职场文书
政协会议宣传标语
2014/10/09 职场文书
资料员岗位职责范本
2015/04/13 职场文书
2016年春季运动会广播稿
2015/08/19 职场文书
python实现简单的聊天小程序
2021/07/07 Python