Python Threading 线程/互斥锁/死锁/GIL锁


Posted in Python onJuly 21, 2019

导入线程包

import threading

准备函数线程,传参数

t1 = threading.Thread(target=func,args=(args,))

类继承线程,创建线程对象

class MyThread(threading.Thread)
  def run(self):
    pass
if __name__ == "__main__":
  t = MyThread()
  t.start()

线程共享全面变量,但在共享全局变量时会出现数据错误问题

使用 threading 模块中的 Lock 类,添加互斥锁可以解决线程共享全局变量问题

# 创建锁
mutex = threading.Lock()
# 锁定
mutex.acquire()
# 释放锁
mutex.release()

互斥锁可能导致死锁问题

在线程间共享多个资源的时候,如果两个线程分别占有一部分资源,并且同时在等待对方的资源时,就会造成死锁.

解决方案:

1.银行家算法:程序设计时想好锁定与释放的时空关系
2.添加超时等待

Python 中 多线程的 GIL 全局解释器锁

GIL是C语言版本python解释器的遗留问题
GIL锁使得python中同一时刻其实只有一个线程在运行
但是多线程毕竟还是闭单线程快,这是因为在一个线程IO阻塞的时间段,其他线程可以运行
GIL 锁和互斥锁是不一样的,GIL锁是锁线程的,互斥锁是锁线程?仁挛竦?互斥锁是开发者自己写的,GIL锁来源与C版本python解释器

解决GIL的方法

1.使用java版的python解释器
2.使用其他语言代码,完成该部分

总结

以上所述是小编给大家介绍的Python Threading 线程/互斥锁/死锁/GIL锁,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Python 相关文章推荐
使用Python的Scrapy框架编写web爬虫的简单示例
Apr 17 Python
Python使用turtule画五角星的方法
Jul 09 Python
python中urllib.unquote乱码的原因与解决方法
Apr 24 Python
python微信跳一跳游戏辅助代码解析
Jan 29 Python
Python设计模式之外观模式实例详解
Jan 17 Python
python实现爬山算法的思路详解
Apr 09 Python
Python log模块logging记录打印用法解析
Jan 20 Python
学python爬虫能做什么
Jul 29 Python
Python爬虫+Tkinter制作一个翻译软件的示例
Feb 20 Python
Python基础之字符串格式化详解
Apr 21 Python
Python必备技巧之函数的使用详解
Apr 04 Python
python神经网络 使用Keras构建RNN训练
May 04 Python
详解Django模版中加载静态文件配置方法
Jul 21 #Python
django数据库自动重连的方法实例
Jul 21 #Python
django使用django-apscheduler 实现定时任务的例子
Jul 20 #Python
python 自定义装饰器实例详解
Jul 20 #Python
Python 列表去重去除空字符的例子
Jul 20 #Python
python列表每个元素同增同减和列表元素去空格的实例
Jul 20 #Python
用Python配平化学方程式的方法
Jul 20 #Python
You might like
php的计数器程序
2006/10/09 PHP
windows7下安装php的php-ssh2扩展教程
2014/07/04 PHP
PHP实现可自定义样式的分页类
2016/03/29 PHP
RSA实现JS前端加密与PHP后端解密功能示例
2019/08/05 PHP
ThinkPHP6.0如何利用自定义验证规则规范的实现登陆
2020/12/16 PHP
基于jQuery的动态增删改查表格信息,可左键/右键提示(原创自Zjmainstay)
2012/07/31 Javascript
jquery submit ie6下失效的原因分析及解决方法
2013/11/15 Javascript
深入解析JavaScript中的变量作用域
2013/12/06 Javascript
js select option对象小结
2013/12/20 Javascript
修改或扩展jQuery原生方法的代码实例
2015/01/13 Javascript
Lab.js初次使用笔记
2015/02/28 Javascript
浅谈javascript中for in 和 for each in的区别
2015/04/23 Javascript
JavaScript实现算术平方根算法-代码超简单
2015/09/11 Javascript
JS中常用的输出方式(五种)
2016/06/12 Javascript
使用JS读取XML文件的方法
2016/11/25 Javascript
深入理解javascript中的 “this”
2017/01/17 Javascript
JS开发常用工具函数(小结)
2019/07/04 Javascript
python实现颜色rgb和hex相互转换的函数
2015/03/19 Python
Python实现获取磁盘剩余空间的2种方法
2017/06/07 Python
Python subprocess库的使用详解
2018/10/26 Python
Django实现单用户登录的方法示例
2019/03/28 Python
keras实现VGG16 CIFAR10数据集方式
2020/07/07 Python
python爬取抖音视频的实例分析
2021/01/19 Python
Pytorch模型迁移和迁移学习,导入部分模型参数的操作
2021/03/03 Python
通过css3动画和opacity透明度实现呼吸灯效果
2019/08/09 HTML / CSS
一款CSS3实现多功能下拉菜单(带分享按)的教程
2014/11/05 HTML / CSS
html5 利用重力感应实现摇一摇换颜色可用来做抽奖等等
2014/05/07 HTML / CSS
关于h5中的fetch方法解读(小结)
2017/11/15 HTML / CSS
梅西百货澳大利亚:Macy’s Australia
2017/07/26 全球购物
瑞典廉价机票预订网站:Seat24
2018/06/19 全球购物
会计职业生涯规划书
2014/01/13 职场文书
小学生竞选班长演讲稿
2014/04/24 职场文书
台风停课通知
2015/04/24 职场文书
2015年妇产科工作总结
2015/05/18 职场文书
完美处理python与anaconda环境变量的冲突问题
2021/04/07 Python
python3使用diagrams绘制架构图的步骤
2021/04/08 Python