对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中List的sort方法指南
Sep 01 Python
10种检测Python程序运行时间、CPU和内存占用的方法
Apr 01 Python
详解Python 实现元胞自动机中的生命游戏(Game of life)
Jan 27 Python
VSCode下配置python调试运行环境的方法
Apr 06 Python
Sanic框架配置操作分析
Jul 17 Python
python实现简单名片管理系统
Nov 30 Python
python使用PyQt5的简单方法
Feb 27 Python
Python使用matplotlib 模块scatter方法画散点图示例
Sep 27 Python
解决Opencv+Python cv2.imshow闪退问题
Apr 24 Python
Python爬虫之Selenium警告框(弹窗)处理
Dec 04 Python
完美解决torch.cuda.is_available()一直返回False的玄学方法
Feb 06 Python
Python3自带工具2to3.py 转换 Python2.x 代码到Python3的操作
Mar 03 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
thinkphp文件引用与分支结构用法实例
2014/11/26 PHP
Yii2框架数据验证操作实例详解
2018/05/02 PHP
php解决安全问题的方法实例
2019/09/19 PHP
javascript 计算两个整数的百分比值
2009/12/26 Javascript
Javascript 通过json自动生成Dom的代码
2010/04/01 Javascript
js工具方法弹出蒙版
2013/05/08 Javascript
jquery中常用的SET和GET$(”#msg”).html循环介绍
2013/10/09 Javascript
表单元素与非表单元素刷新区别详细解析
2013/11/06 Javascript
JS删除字符串中重复字符方法
2014/03/09 Javascript
javascript常用函数归纳整理
2014/10/31 Javascript
javascript中的Base64、UTF8编码与解码详解
2015/03/18 Javascript
浅谈js中的三种继承方式及其优缺点
2016/08/10 Javascript
javascript设置文本框光标的方法实例小结
2016/11/04 Javascript
JavaScript原生数组Array常用方法
2017/04/06 Javascript
jQuery实现获取table中鼠标click点击位置行号与列号的方法
2017/10/09 jQuery
JS实现元素上下左右移动效果
2017/10/18 Javascript
详解vuex的简单使用
2018/03/12 Javascript
轻量级富文本编辑器wangEditor结合vue使用方法示例
2018/10/10 Javascript
angular4+百分比进度显示插件用法示例
2019/05/05 Javascript
es6中new.target的作用和使用场景简单示例分析
2020/03/14 Javascript
[59:26]DOTA2上海特级锦标赛D组资格赛#1 EG VS VP第二局
2016/02/28 DOTA
Python入门篇之函数
2014/10/20 Python
Python 实现王者荣耀中的敏感词过滤示例
2019/01/21 Python
台湾深度自由行旅游平台:Tripbaa趣吧
2017/10/10 全球购物
Pat McGrath Labs官网:世界上最有影响力的化妆师推出的彩妆品牌
2018/01/07 全球购物
电信专业应届生自荐信
2013/09/28 职场文书
写自荐信三大法宝
2014/01/24 职场文书
模具数控专业自荐信
2014/01/27 职场文书
小学生春游活动方案
2014/08/20 职场文书
文秘班元旦晚会活动策划方案
2014/08/28 职场文书
社区灵活就业证明
2014/11/03 职场文书
综合素质评价自我评价
2015/03/06 职场文书
2015年业务员工作总结范文
2015/04/07 职场文书
学生犯错保证书
2015/05/09 职场文书
幼儿园开学家长寄语(2016秋季)
2015/12/03 职场文书
浅谈Python协程asyncio
2021/06/20 Python