对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之大话题小函数(1)
Oct 10 Python
Python处理XML格式数据的方法详解
Mar 21 Python
pyenv命令管理多个Python版本
Mar 26 Python
Python实现批量读取图片并存入mongodb数据库的方法示例
Apr 02 Python
浅谈pandas中DataFrame关于显示值省略的解决方法
Apr 08 Python
Python工厂函数用法实例分析
May 14 Python
用python脚本24小时刷浏览器的访问量方法
Dec 07 Python
Pandas实现dataframe和np.array的相互转换
Nov 30 Python
Linux安装Python3如何和系统自带的Python2并存
Jul 23 Python
Python3爬虫里关于识别微博宫格验证码的知识点详解
Jul 30 Python
python中sys模块是做什么用的
Aug 16 Python
PyCharm最新激活码PyCharm2020.2.3有效
Nov 18 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
phpfans留言版用到的数据操作类和分页类
2007/01/04 PHP
在数据量大(超过10万)的情况下
2007/01/15 PHP
破解.net程序(dll文件)编译和反编译方法
2013/01/31 PHP
PHP的mysqli_rollback()函数讲解
2019/01/23 PHP
javascript Zifa FormValid 0.1表单验证 代码打包下载
2007/06/08 Javascript
document.documentElement &amp;&amp; document.documentElement.scrollTop
2007/12/01 Javascript
jquery tablesorter.js 支持中文表格排序改进
2009/12/09 Javascript
Javascript 类与静态类的实现
2010/04/01 Javascript
JS中如何比较两个Json对象是否相等实例代码
2016/07/13 Javascript
Javascript OOP之面向对象
2016/07/31 Javascript
JavaScript数据操作_浅谈原始值和引用值的操作本质
2016/08/23 Javascript
利用jQuery实现打字机字幕效果实例代码
2016/09/02 Javascript
总结几道关于Node.js的面试问题
2017/01/11 Javascript
JS实现仿饿了么在浏览器标签页失去焦点时网页Title改变
2017/06/01 Javascript
angular内置provider之$compileProvider详解
2017/09/27 Javascript
微信小程序template模板实例详解
2017/10/27 Javascript
详解Vue中数组和对象更改后视图不刷新的问题
2018/09/21 Javascript
如何从头实现一个node.js的koa框架
2019/06/17 Javascript
JS实现分页导航效果
2020/02/19 Javascript
Nodejs文件上传、监听上传进度的代码
2020/03/27 NodeJs
vantUI 获得piker选中值的自定义ID操作
2020/11/04 Javascript
python使用os.listdir和os.walk获得文件的路径的方法
2017/12/16 Python
夏威夷航空官网:Hawaiian Airlines
2016/09/11 全球购物
西门豹教学反思
2014/02/04 职场文书
新年主持词
2014/03/27 职场文书
《故乡》教学反思
2014/04/10 职场文书
2015年党员自评材料
2014/12/17 职场文书
入党现实表现材料
2014/12/23 职场文书
国家助学金感谢信
2015/01/21 职场文书
物业客服专员岗位职责
2015/04/07 职场文书
2015年宣传思想工作总结
2015/05/22 职场文书
歌咏比赛主持词
2015/06/29 职场文书
先进基层党组织事迹材料2016
2016/02/29 职场文书
创业计划书之游泳馆
2019/09/16 职场文书
读《解忧杂货店》有感:请相信一切都是最好的安排
2019/11/07 职场文书
2019年农民幸福观调查的实践感悟
2019/12/19 职场文书