对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 相关文章推荐
Django实现图片文字同时提交的方法
May 26 Python
快速实现基于Python的微信聊天机器人示例代码
Mar 03 Python
python Celery定时任务的示例
Mar 13 Python
在windows下Python打印彩色字体的方法
May 15 Python
Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例
Feb 21 Python
python把1变成01的步骤总结
Feb 27 Python
PyQt5 加载图片和文本文件的实例
Jun 14 Python
selenium中get_cookies()和add_cookie()的用法详解
Jan 06 Python
TensorFlow梯度求解tf.gradients实例
Feb 04 Python
Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
Apr 08 Python
Python enumerate() 函数如何实现索引功能
Jun 29 Python
使用python创建股票的时间序列可视化分析
Mar 03 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
PHP导入Excel到MySQL的方法
2011/04/23 PHP
Yii快速入门经典教程
2015/12/28 PHP
PHP验证码类ValidateCode解析
2017/01/07 PHP
Laravel 模型关联基础教程详解
2019/09/17 PHP
tp5.1框架数据库子查询操作实例分析
2020/05/26 PHP
PHP+MySql实现一个简单的留言板
2020/07/19 PHP
jQuery实现切换页面布局使用介绍
2011/10/09 Javascript
JS实现图片翻书效果示例代码
2013/09/09 Javascript
jquery图片滚动放大代码分享(1)
2015/08/25 Javascript
ionic2 tabs使用 Modal底部tab弹出框
2016/12/30 Javascript
BootStrap学习笔记之nav导航栏和面包屑导航
2017/01/03 Javascript
在vue.js中抽出公共代码的方法示例
2017/06/08 Javascript
js轮播图无缝滚动效果
2017/06/17 Javascript
详解React Native顶|底部导航使用小技巧
2017/09/14 Javascript
解析vue中的$mount
2017/12/21 Javascript
让你5分钟掌握9个JavaScript小技巧
2018/06/09 Javascript
JavaScript函数式编程(Functional Programming)箭头函数(Arrow functions)用法分析
2019/05/22 Javascript
vue+axios 拦截器实现统一token的案例
2020/09/11 Javascript
python实现图片批量剪切示例
2014/03/25 Python
Tensorflow实现卷积神经网络的详细代码
2018/05/24 Python
python用opencv批量截取图像指定区域的方法
2019/01/24 Python
Python 限制线程的最大数量的方法(Semaphore)
2019/02/22 Python
浅谈Python中的可迭代对象、迭代器、For循环工作机制、生成器
2019/03/11 Python
Python使用sqlalchemy模块连接数据库操作示例
2019/03/13 Python
浅谈Python 参数与变量
2020/06/20 Python
浅谈python出错时traceback的解读
2020/07/15 Python
浅谈css3中的渐进增强和优雅降级
2017/12/01 HTML / CSS
德国亚马逊官方网站:Amazon.de
2020/11/15 全球购物
函授毕业生的自我鉴定
2013/11/26 职场文书
建筑人员岗位职责
2013/12/25 职场文书
建筑施工安全生产责任书
2014/07/22 职场文书
中学生运动会通讯稿大全
2014/09/18 职场文书
2014年工程部工作总结
2014/11/25 职场文书
门店店长岗位职责
2015/04/14 职场文书
2015年幼儿园班主任个人工作总结
2015/10/22 职场文书
SQL Server 忘记密码以及重新添加新账号
2022/04/26 SQL Server