对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使用any判断一个对象是否为空的方法
Nov 19 Python
Python中实现对Timestamp和Datetime及UTC时间之间的转换
Apr 08 Python
python连接字符串的方法小结
Jul 13 Python
Python的Django中将文件上传至七牛云存储的代码分享
Jun 03 Python
Python批量查询域名是否被注册过
Jun 21 Python
python2.7 json 转换日期的处理的示例
Mar 07 Python
python 读取竖线分隔符的文本方法
Dec 20 Python
Python使用itchat 功能分析微信好友性别和位置
Aug 05 Python
Django框架 查询Extra功能实现解析
Sep 04 Python
python实现静态服务器
Sep 05 Python
Python面向对象之私有属性和私有方法应用案例分析
Dec 31 Python
Python3+Flask安装使用教程详解
Feb 16 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提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别
2011/02/08 PHP
php 定界符格式引起的错误
2011/05/24 PHP
实例讲解PHP页面静态化
2018/02/05 PHP
php处理抢购类功能的高并发请求
2018/02/08 PHP
一段批量给页面上的控件赋值js
2010/06/19 Javascript
JavaScript判断密码强度(自写代码)
2013/09/06 Javascript
javascript性能优化之事件委托实例详解
2015/12/12 Javascript
详解原生js实现offset方法
2017/06/15 Javascript
ES6中的rest参数与扩展运算符详解
2017/07/18 Javascript
微信小程序实现image组件图片自适应宽度比例显示的方法
2018/01/16 Javascript
extract-text-webpack-plugin用法详解
2019/02/14 Javascript
Vue模板语法中数据绑定的实例代码
2019/05/17 Javascript
webpack HappyPack实战详解
2019/10/08 Javascript
如何使用webpack打包一个库library的方法步骤
2019/12/18 Javascript
5分钟快速看懂ES6中的反射与代理
2019/12/19 Javascript
使用webpack搭建vue环境的教程详解
2019/12/31 Javascript
VUE实时监听元素距离顶部高度的操作
2020/07/29 Javascript
Handtrack.js库实现实时监测手部运动(推荐)
2021/02/08 Javascript
python读取json文件并将数据插入到mongodb的方法
2015/03/23 Python
python matplotlib画图实例代码分享
2017/12/27 Python
Python3实现获取图片文字里中文的方法分析
2018/12/13 Python
Python 使用Numpy对矩阵进行转置的方法
2019/01/28 Python
Python 计算任意两向量之间的夹角方法
2019/07/05 Python
python查看文件大小和文件夹内容的方法
2019/07/08 Python
Python命令行参数解析工具 docopt 安装和应用过程详解
2019/09/26 Python
如何在python中执行另一个py文件
2020/04/30 Python
HTML5在线预览PDF的示例代码
2017/09/14 HTML / CSS
旅游与酒店管理的自我评价分享
2013/11/03 职场文书
母亲节感恩活动记录
2014/03/16 职场文书
协议书样本
2014/04/23 职场文书
大学生简历求职信
2014/06/24 职场文书
安全生产月标语
2014/10/07 职场文书
2014旅游局党组书记党建工作汇报材料
2014/11/02 职场文书
冬季作息时间调整通知
2015/04/24 职场文书
新娘婚礼致辞
2015/07/27 职场文书
2016教师读书思廉心得体会
2016/01/23 职场文书