对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实现跨文件全局变量的方法
Jul 07 Python
Python常用模块用法分析
Sep 08 Python
RC4文件加密的python实现方法
Jun 30 Python
Python自动化测试ConfigParser模块读写配置文件
Aug 15 Python
Python简单遍历字典及删除元素的方法
Sep 18 Python
简单了解Python中的几种函数
Nov 03 Python
Python中列表与元组的乘法操作示例
Feb 10 Python
对python实时得到鼠标位置的示例讲解
Oct 14 Python
django-rest-framework 自定义swagger过程详解
Jul 18 Python
Python依赖包整体迁移方法详解
Aug 15 Python
python str字符串转uuid实例
Mar 03 Python
Python还能这么玩之用Python修改了班花的开机密码
Jun 04 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
利用static实现表格的颜色隔行显示
2006/10/09 PHP
php实现下载限制速度示例分享
2014/02/13 PHP
php中heredoc与nowdoc介绍
2014/12/25 PHP
php中引用符号(&amp;)的使用详细介绍
2016/12/06 PHP
Laravel利用gulp如何构建前端资源详解
2018/06/03 PHP
javascript字典探测用户名工具
2006/10/05 Javascript
js写的方法实现上传图片之后查看大图
2014/03/05 Javascript
js函数名与form表单元素同名冲突的问题
2014/03/07 Javascript
页面装载js及性能分析方法介绍
2014/03/21 Javascript
用js传递value默认值的示例代码
2014/09/11 Javascript
JavaScript中的Function函数
2015/08/27 Javascript
如何使用jquery修改css中带有!important的样式属性
2016/04/28 Javascript
JavaScript 链式结构序列化详解
2016/09/30 Javascript
纯js模仿windows系统日历
2017/02/04 Javascript
vue移动端项目缓存问题实践记录
2018/10/29 Javascript
详解Vue中使用插槽(slot)、聚类插槽
2019/04/12 Javascript
关于layui的下拉搜索框异步加载数据的解决方法
2019/09/28 Javascript
Vue 中获取当前时间并实时刷新的实现代码
2020/05/12 Javascript
JS中准确判断变量类型的方法
2020/06/01 Javascript
vue-quill-editor 自定义工具栏和自定义图片上传路径操作
2020/08/03 Javascript
vue radio单选框,获取当前项(每一项)的value值操作
2020/09/10 Javascript
浅谈javascript事件环微任务和宏任务队列原理
2020/09/12 Javascript
利用Python中的输入和输出功能进行读取和写入的教程
2015/04/14 Python
python实现比较两段文本不同之处的方法
2015/05/30 Python
详解Python中的相对导入和绝对导入
2017/01/06 Python
Python 3.6打包成EXE可执行程序的实现
2019/10/18 Python
Python使用re模块验证危险字符
2020/05/21 Python
python初步实现word2vec操作
2020/06/09 Python
Python把图片转化为pdf代码实例
2020/07/28 Python
会计自我鉴定
2014/02/04 职场文书
建筑工程造价专业自荐信
2014/07/08 职场文书
社区党建工作总结2015
2015/05/13 职场文书
小学体育教学随笔
2015/08/14 职场文书
三好学生竞选稿范文
2019/08/21 职场文书
go语言中http超时引发的事故解决
2021/06/02 Golang
Python  lambda匿名函数和三元运算符
2022/04/19 Python