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实现简单socket通信的方法
Apr 19 Python
django实现前后台交互实例
Aug 07 Python
python DataFrame获取行数、列数、索引及第几行第几列的值方法
Apr 08 Python
python hbase读取数据发送kafka的方法
Dec 27 Python
python  logging日志打印过程解析
Oct 22 Python
Python实现打印实心和空心菱形
Nov 23 Python
使用Python paramiko模块利用多线程实现ssh并发执行操作
Dec 05 Python
Python如何使用turtle库绘制图形
Feb 26 Python
基于python检查矩阵计算结果
May 21 Python
python3 中使用urllib问题以及urllib详解
Aug 03 Python
python实现语音常用度量方法的代码详解
May 25 Python
python区块链实现简版工作量证明
May 25 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
深入浅析yii2-gii自定义模板的方法
2016/04/26 PHP
PHP基本语法实例总结
2016/09/09 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
jquery 最简单的属性菜单
2009/10/08 Javascript
js三种排序算法分享
2012/08/16 Javascript
页面实时更新时间的JS实例代码
2013/12/18 Javascript
做好七件事帮你提升jQuery的性能
2014/02/06 Javascript
Jquery弹出层插件ThickBox的使用方法
2014/12/09 Javascript
js实现感应鼠标图片透明度变化的方法
2015/02/20 Javascript
jQuery实现冻结表头的方法
2015/03/09 Javascript
使用CDN和AJAX加速WordPress中jQuery的加载
2015/12/05 Javascript
Vue.js每天必学之表单控件绑定
2016/09/05 Javascript
利用js查找数组中指定元素并返回该元素的所有索引示例
2017/03/29 Javascript
详谈js对url进行编码和解码(三种方式的区别)
2017/08/16 Javascript
vue-cli常用设置总结
2018/02/24 Javascript
vue-cli脚手架build目录下utils.js工具配置文件详解
2018/09/14 Javascript
解决LayUI数据表格复选框不居中显示的问题
2019/09/25 Javascript
uni-app 支持多端第三方地图定位的方法
2020/01/03 Javascript
JS+HTML实现自定义上传图片按钮并显示图片功能的方法分析
2020/02/12 Javascript
在react-antd中弹出层form内容传递给父组件的操作
2020/10/24 Javascript
跟老齐学Python之不要红头文件(1)
2014/09/28 Python
Python下的subprocess模块的入门指引
2015/04/16 Python
Python上下文管理器和with块详解
2017/09/09 Python
python logging重复记录日志问题的解决方法
2018/07/12 Python
python实现机器人卡牌
2019/10/06 Python
Keras 数据增强ImageDataGenerator多输入多输出实例
2020/07/03 Python
Python基于execjs运行js过程解析
2020/11/27 Python
HTML5拖拽API经典实例详解
2018/04/20 HTML / CSS
李维斯德国官方网上商店:Levi’s德国
2016/09/10 全球购物
奇怪的鱼:Weird Fish
2018/03/18 全球购物
学校社会实践活动总结
2014/07/03 职场文书
授权委托书(完整版)
2014/09/10 职场文书
党的群众路线教育实践活动批评与自我批评范文
2014/10/16 职场文书
2014年人事行政工作总结
2014/12/03 职场文书
nginx网站服务如何配置防盗链(推荐)
2021/03/31 Servers
MySQL中B树索引和B+树索引的区别详解
2022/03/03 MySQL