对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的汉字转GBK码实现代码
Feb 19 Python
Python 类与元类的深度挖掘 II【经验】
May 06 Python
Python实现爬取需要登录的网站完整示例
Aug 19 Python
matplotlib绘制动画代码示例
Jan 02 Python
对Python3.6 IDLE常用快捷键介绍
Jul 16 Python
Python 隐藏输入密码时屏幕回显的实例
Feb 19 Python
python开发游戏的前期准备
May 05 Python
python3中pip3安装出错,找不到SSL的解决方式
Dec 12 Python
pycharm不能运行.py文件的解决方法
Feb 12 Python
python随机模块random使用方法详解
Feb 14 Python
Python+OpenCV图像处理——打印图片属性、设置存储路径、调用摄像头
Oct 22 Python
Python时间操作之pytz模块使用详解
Jun 14 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表单提交表单名称含有点号(.)则会被转化为下划线(_)
2011/12/14 PHP
linux下安装php的memcached客户端
2014/08/03 PHP
PHP针对常规模板引擎中与CSS/JSON冲突的解决方法
2014/08/19 PHP
php实现头像上传预览功能
2017/04/27 PHP
jQuery 相关控件的事件操作分解
2009/08/03 Javascript
JS使用getComputedStyle()方法获取CSS属性值
2014/04/23 Javascript
使用纯javascript实现放大镜效果
2015/03/18 Javascript
基于JavaScript实现添加到购物车效果附源码下载
2016/08/22 Javascript
CSS+jQuery实现简单的折叠菜单
2016/12/20 Javascript
ReactNative Image组件使用详解
2017/08/07 Javascript
用最简单的方法判断JavaScript中this的指向(推荐)
2017/09/04 Javascript
利用JS实现scroll自定义滚动效果详解
2017/10/17 Javascript
redux处理异步action解决方案
2020/03/22 Javascript
Python set集合类型操作总结
2014/11/07 Python
python实现简单socket程序在两台电脑之间传输消息的方法
2015/03/13 Python
Python实现栈的方法
2015/05/26 Python
python定时器(Timer)用法简单实例
2015/06/04 Python
Python基于Matplotlib库简单绘制折线图的方法示例
2017/08/14 Python
对python numpy数组中冒号的使用方法详解
2018/04/17 Python
python3+PyQt5自定义视图详解
2018/04/24 Python
在pycharm 中添加运行参数的操作方法
2019/01/19 Python
详解Python爬取并下载《电影天堂》3千多部电影
2019/04/26 Python
Python数据类型之String字符串实例详解
2019/05/08 Python
python 实现return返回多个值
2019/11/19 Python
python 计算积分图和haar特征的实例代码
2019/11/20 Python
python求解汉诺塔游戏
2020/07/09 Python
python批量修改交换机密码的示例
2020/09/22 Python
美国电力供应商店/电气批发商:USESI
2018/10/12 全球购物
Surfdome西班牙:世界上最受欢迎的生活方式品牌
2019/02/13 全球购物
Brother加拿大官网:打印机、贴标机、缝纫机
2019/10/09 全球购物
教师实习自我鉴定
2013/12/11 职场文书
领班岗位职责范文
2014/02/06 职场文书
会展策划与管理专业大学生职业生涯规划
2014/02/07 职场文书
三人合伙协议书范本
2014/10/29 职场文书
2014年卫生监督工作总结
2014/12/09 职场文书
Java实现HTML转为Word的示例代码
2022/06/28 Java/Android