对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完全新手教程
Feb 08 Python
python字符串替换的2种方法
Nov 30 Python
处理Python中的URLError异常的方法
Apr 30 Python
python清除字符串里非数字字符的方法
Jul 02 Python
Flask数据库迁移简单介绍
Oct 24 Python
pandas string转dataframe的方法
Apr 11 Python
python进行两个表格对比的方法
Jun 27 Python
python使用tkinter库实现五子棋游戏
Jun 18 Python
Django ORM 查询管理器源码解析
Aug 05 Python
python pycharm的安装及其使用
Oct 11 Python
Python 使用元类type创建类对象常见应用详解
Oct 17 Python
django模板获取list中指定索引的值方式
May 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 批量查询搜狗sogou代码分享
2015/05/17 PHP
PHP+jQuery+Ajax实现分页效果 jPaginate插件的应用
2015/10/09 PHP
js直接编辑当前cookie的脚本
2008/09/14 Javascript
javascript AutoScroller 函数类
2009/05/29 Javascript
通过javascript把图片转化为字符画
2013/10/24 Javascript
JQuery文字列表向上滚动的代码
2013/11/13 Javascript
jQuery遍历json中多个map的方法
2015/02/12 Javascript
JavaScript中getUTCMinutes()方法的使用详解
2015/06/10 Javascript
js带缩略图的图片轮播效果代码分享
2015/09/14 Javascript
JavaScript 模块的循环加载实现方法
2015/12/13 Javascript
JS实现简单的右下角弹出提示窗口完整实例
2016/06/21 Javascript
javascript验证手机号和实现星号(*)代替实例
2016/08/16 Javascript
浅谈html转义及防止javascript注入攻击的方法
2016/12/04 Javascript
jQuery中get方法用法分析
2016/12/07 Javascript
Node.js API详解之 readline模块用法详解
2020/05/22 Javascript
VUE实时监听元素距离顶部高度的操作
2020/07/29 Javascript
[00:15]天涯墨客终极技能展示
2018/08/25 DOTA
Python中__name__的使用实例
2015/04/14 Python
Python3计算三角形的面积代码
2017/12/18 Python
Python单元和文档测试实例详解
2019/04/11 Python
Python3内置模块random随机方法小结
2019/07/13 Python
django和vue实现数据交互的方法
2019/08/21 Python
简单介绍一下pyinstaller打包以及安全性的实现
2020/06/02 Python
tensorflow 2.0模式下训练的模型转成 tf1.x 版本的pb模型实例
2020/06/22 Python
Pytorch 高效使用GPU的操作
2020/06/27 Python
Glamest意大利:女性在线奢侈品零售店
2019/04/28 全球购物
最畅销的视频游戏享受高达90%的折扣:CDKeys
2020/02/10 全球购物
系统管理员的职责包括那些?管理的对象是什么?
2016/09/20 面试题
学年自我鉴定范文
2013/10/01 职场文书
质检员的岗位职责
2013/11/15 职场文书
小学生新学期寄语
2014/01/19 职场文书
2014年中班元旦活动方案
2014/02/14 职场文书
党员十八大心得体会
2014/09/12 职场文书
销售口号霸气押韵
2015/12/24 职场文书
《彼得与狼》教学反思
2016/02/20 职场文书
诚信高考倡议书
2019/06/24 职场文书