对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抓取网页正文的源码
Jun 11 Python
基于Python实现通过微信搜索功能查看谁把你删除了
Jan 27 Python
Pycharm无法使用已经安装Selenium的解决方法
Oct 13 Python
Python 移动光标位置的方法
Jan 20 Python
Python函数装饰器常见使用方法实例详解
Mar 30 Python
Python3.5局部变量与全局变量作用域实例分析
Apr 30 Python
Python 脚本拉取 Docker 镜像问题
Nov 10 Python
Windows上安装tensorflow  详细教程(图文详解)
Feb 04 Python
Python流程控制常用工具详解
Feb 24 Python
Python使用xpath实现图片爬取
Sep 16 Python
Python安装Bs4的多种方法
Nov 28 Python
Python编程源码报错解决方法总结经验分享
Oct 05 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
自制汽车收音机天线:收听广播的技巧和方法
2021/03/02 无线电
用PHP的ob_start();控制您的浏览器cache!
2007/02/14 PHP
SESSION信息保存在哪个文件目录下以及能够用来保存什么类型的数据
2012/06/17 PHP
php中\r \r\n \t的区别示例介绍
2014/02/08 PHP
php验证是否是md5编码的简单代码
2014/04/01 PHP
jQuery判断指定id的对象是否存在的方法
2015/05/22 Javascript
JavaScript实现向右伸出的多级网页菜单效果
2015/08/25 Javascript
jQuery.extend 函数及用法详细
2015/09/06 Javascript
JS修改地址栏参数实例代码
2016/06/14 Javascript
详解Vue.js动态绑定class
2016/12/20 Javascript
详解Vue组件之间的数据通信实例
2017/06/17 Javascript
Angular2的管道Pipe的使用方法
2017/11/07 Javascript
vue2实现数据请求显示loading图
2017/11/28 Javascript
javaScript中的空值和假值
2017/12/18 Javascript
js防抖和节流的深入讲解
2018/12/06 Javascript
vue 组件中使用 transition 和 transition-group实现过渡动画
2019/07/09 Javascript
如何在postman测试用例中实现断言过程解析
2020/07/09 Javascript
Openlayers3实现车辆轨迹回放功能
2020/09/29 Javascript
研究Python的ORM框架中的SQLAlchemy库的映射关系
2015/04/25 Python
Python 字符串大小写转换的简单实例
2017/01/21 Python
Python 的类、继承和多态详解
2017/07/16 Python
Python+matplotlib实现计算两个信号的交叉谱密度实例
2018/01/08 Python
pycharm解决关闭flask后依旧可以访问服务的问题
2020/04/03 Python
CSS3标注引用的出处和来源的方法
2020/02/25 HTML / CSS
茱莉蔻美国官网:Jurlique美国
2020/11/24 全球购物
求职信内容考虑哪几点
2013/10/05 职场文书
大四毕业生学习总结的自我评价
2013/10/31 职场文书
校园创业策划书
2014/01/14 职场文书
母亲七十大寿答谢词
2014/01/18 职场文书
马智宇婚礼主持词
2014/03/22 职场文书
老人祝寿主持词
2014/03/28 职场文书
单位绩效考核方案
2014/05/11 职场文书
学习“七一”讲话精神体会
2014/07/08 职场文书
2015年科研工作总结范文
2015/05/13 职场文书
2016国庆节67周年红领巾广播稿
2015/12/18 职场文书
Python自动化测试PO模型封装过程详解
2021/06/22 Python