对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与shell的3种交互方式介绍
Apr 11 Python
python类装饰器用法实例
Jun 04 Python
Python通过Django实现用户注册和邮箱验证功能代码
Dec 11 Python
pandas修改DataFrame列名的方法
Apr 08 Python
Python实现的朴素贝叶斯算法经典示例【测试可用】
Jun 13 Python
解决tensorflow测试模型时NotFoundError错误的问题
Jul 26 Python
Python实现获取汉字偏旁部首的方法示例【测试可用】
Dec 18 Python
对PyQt5中树结构的实现方法详解
Jun 17 Python
使用Puppeteer爬取微信文章的实现
Feb 11 Python
Python绘图之二维图与三维图详解
Aug 04 Python
python生成word合同的实例方法
Jan 12 Python
详解python日志输出使用配置文件格式
Feb 10 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 file_get_contents 函数超时的几种解决方法
2009/07/30 PHP
PHP抽象类 介绍
2012/06/13 PHP
PHP面向对象之旅:深入理解static变量与方法
2014/01/06 PHP
thinkphp循环结构用法实例
2014/11/24 PHP
php递归删除指定文件夹的方法小结
2015/04/20 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
2017/12/21 PHP
Yii框架中用response保存cookie,用request读取cookie的原理解析
2019/09/04 PHP
JavaScript 事件记录使用说明
2009/10/20 Javascript
解决jquery .ajax 在IE下卡死问题的解决方法
2009/10/26 Javascript
JavaScript Event学习第六章 事件的访问
2010/02/07 Javascript
基于jquery的点击链接插入链接内容的代码
2012/07/31 Javascript
JavaScript prototype属性深入介绍
2012/11/27 Javascript
CheckBoxList多选样式jquery、C#获取选择项
2013/09/06 Javascript
jquery遍历checkbox的注意事项说明
2014/02/21 Javascript
JavaScript面试题(指针、帽子和女朋友)
2016/11/23 Javascript
PHP 实现一种多文件上传的方法
2017/09/20 Javascript
微信小程序多音频播放进度条问题
2018/08/28 Javascript
vue 对象添加或删除成员时无法实时更新的解决方法
2019/05/01 Javascript
微信小程序合法域名配置方法
2019/05/06 Javascript
vue调用语音播放的方法
2019/09/27 Javascript
vue 重塑数组之修改数组指定index的值操作
2020/08/09 Javascript
Python制作爬虫抓取美女图
2016/01/20 Python
完美解决Django2.0中models下的ForeignKey()问题
2020/05/19 Python
可以随进度显示不同颜色的css3进度条分享
2014/04/11 HTML / CSS
稀有和绝版书籍:Biblio.com
2017/02/02 全球购物
伦敦剧院门票:From The Box Office
2018/06/30 全球购物
Clarks其乐鞋荷兰官网:Clarks荷兰
2019/07/05 全球购物
周仰杰(JIMMY CHOO)法国官方网站:闻名世界的鞋子品牌
2019/09/27 全球购物
销售人员自我评价怎么写
2013/09/19 职场文书
感恩节活动策划方案
2014/05/16 职场文书
公司应聘求职信
2014/06/21 职场文书
高中学生自我评价范文
2014/09/23 职场文书
党员群众路线教育实践活动剖析材料
2014/10/10 职场文书
详解Python中下划线的5种含义
2021/07/15 Python
python数据可视化JupyterLab实用扩展程序Mito
2021/11/20 Python
css样式important规则的正确使用方式
2022/06/10 HTML / CSS