985大学小伙掉进Python GIL锁坑里,官方删除GIL锁终于有了盼头

2023年10月08日09:34:04 科技 1533

我们知道,现在python呢已经成为了一个非常普及的编程语言了,同时呢也已经成为了tiobe统计排名第一的语言,超过了java和C/C++

985大学小伙掉进Python GIL锁坑里,官方删除GIL锁终于有了盼头 - 天天要闻

TIOBE 2023年9月编程语言排行榜

因为python确实学习门槛低,非常容易上手。现在几乎所有人都会用python写一些简单的代码,实现自己的需求。但是,如果没有深入系统的学习python,也会掉进一些坑里。今天我们就来聊一聊一个有关一个身边985大学生掉进python 多线程GIL锁坑里的故事。

985大学小伙掉进Python GIL锁坑里,官方删除GIL锁终于有了盼头 - 天天要闻

最近部门来了一个刚毕业的985研究生,人很聪明动手能力也很强,在组里负责激光雷达相关的模块开发。突然有一天,小伙找到我,说代码里遇到了性能瓶颈问题,一直解决不了,很困惑。仔细了解后,知道了他在用python里的2个线程分别读取2个激光雷达的数据然后做进一步分析处理,但发现其中一个线程的读取效率特别低始终无法提高。这两个线程是在同一个进程中创建的。显然,精通python的人都知道,这里是由于Python 进程中存在GIL锁(也就是Global Interpreter Lock,即全局解释器锁)而导致的,所以我建议他改用多进程来规避这个问题,他照做之后问题得到解决。

小伙也可能是刚接触python,现学现用,忽略了系统学习,所以导致了对GIL锁缺乏了解,所以掉进了坑里。可见,学习一门编程语言,系统的学习,抓住重点,打牢基础是多么重要,所谓磨刀不误砍柴工。同时,勤学好问,也很重要,遇到问题要多向团队里的人请教,当然,前提是这个团队不内卷,和谐友好。

现在我们说回这个Pyhon中的GIL锁。学习GIL锁,起码要搞清楚5个问题:1,什么是GIL锁;2,为什么Python必须引入GIL锁?3,GIL锁什么时候释放?4,如何解决GIL锁的性能问题?5,有了GIL锁,还需要用额外的锁吗?

第一个问题:什么是GIL锁?

GIL锁和在Python代码中使用线程锁Lock并不是一个层面的概念。GIL是在实现Python解释器(CPython)时所引入的一个概念,每一个Python进程运行时都对应一个CPython解释器进程。在CPython解释器内部运行多个线程的时候,每个线程在解释器内部申请相应的全局资源,为了防止资源竞争而发生错误,对所有线程申请全局资源增加了限制-必须获得全局解释器锁GIL。每个线程想要运行首先获取这个解释器进程中唯一的GIL,因此Python进程中所有线程只能一个一个交替的执行。所以在Python程序里,就算使用多线程,运行在多核CPUS上,其实还是一个线程在工作,这是CPython的一个缺陷,其他语言没有。

第二个问题:为什么Python必须引入GIL?

Python调用的线程都是原生线程,通过C语言提供原生接口,相当于C语言的一个函数,一旦执行Python解释器就再也不能控制它,必须等它返回结果。如果启动n个线程,那么这n个线程独自执行,访问全局资源,会造成资源竞争,结果就会有问题。CPython加入GIL,就可以在同一时间只有拿到GIL锁的一个线程能够工作。虽然这n个线程都启动了,但是同一时间只能让一个线程访问全局数据,其他的几个都只能等待。

第三个问题:GIL什么时候释放?

在当前线程执行超时后会自动释放,python 3.x使用计时器(执行时间达到阈值后,当前线程释放GIL)或Python 2.x,tickets计数达到100

在当前线程执行阻塞操作时会自动释放,比如在IO操作等可能会引起阻塞的system call之前,可以暂时释放GIL,但在执行完毕后,必须重新获取GIL,因此多线程爬取比单线程性能有提升,因为遇到IO阻塞会自动释放GIL锁。

第四个问题:如何解决GIL锁的性能问题?

多线程程序在进行IO等操作时的运行速度还是要比单线程速度快,但是在运行计算密集型的程序时,需要使用CPU进行大量的计算,但由于GIL锁的性质导致程序执行中始终都是一个CPU进行计算,所以计算速度及其缓慢,运行此类的程序不推荐使用线程,有两种方式解决:

1,使用多进程的方式,避免GIL锁的约束;

2,使用其他运行速度较快的语言模块,例如C语言。

第五个问题:既然存在GIL是否意味每个线程访问全局数据就不用加Lock互斥锁了呢?

用户操作全局数据还是必须加Lock,因为GIL的释放时机我们无法控制,此时对全局数据的操作很可能并没有完成,而不像Lock那样我们用完才释放。

当然,python的GIL锁一直被开发者诟病,python官方团队也心知肚明,所以最近Python 团队已经正式接受了删除 GIL 的这个提议,并将其设置为可选模式。

深度学习三巨头之一的 Yann LeCun 发文欢呼:没有了 GIL,现在,Python 代码可以自由的执行多线程了。

985大学小伙掉进Python GIL锁坑里,官方删除GIL锁终于有了盼头 - 天天要闻

深度学习三巨头之一的 Yann LeCun 发文祝贺

CPython 核心开发者 Thomas Wouters 撰文描述了 Python 中的无 GIL 细节,并对未来发展做了展望。短期内,会将 no-GIL 构建作为一种实验性构建模式,大概会在 3.13 版本(也有可能推迟到 3.14 版本,目前官网的python版本是3.12版本)支持,比如允许用户关闭GIL锁,然后在未来某个版本将no-GIL设置为默认方式。长期来看,希望 no-GIL 成为默认方式,并删除 GIL 的所有痕迹(但不会不必要地破坏向后兼容性)。所以,python实现真正多线程的那一天也许不会太遥远了。

好,这次我们就聊到这里,谢谢大家的观看,下次再见

科技分类资讯推荐

阿维塔全球研发中心启用,与华为联合共创进入新阶段 - 天天要闻

阿维塔全球研发中心启用,与华为联合共创进入新阶段

近日,阿维塔全球研发中心正式启用,可容纳超过1000人。接近阿维塔的知情人士透露,该办公大楼于2024年12月启动装修,其核心功能是承载阿维塔与华为联合共创团队的协同工作。此次全球研发中心的落成启用,预示着阿维塔与华为的联合共创将进入更大规
销量承压、动销欠佳,高玉玲如何让海信经销商“脱困”? - 天天要闻

销量承压、动销欠佳,高玉玲如何让海信经销商“脱困”?

文/曹双涛编辑/杨博丞2025年按照既定目标,海信集团整体营收需达到3000亿元。但2024年除高玉玲接棒代慧忠成为海信家电董事长,网传海信裁员3万人、裁员比例高达20%~30%外。公开数据显示,2024年海信集团营收2143亿元。另据海信家电发布的2024年年报显示,当年海信家电营收和归母净利润分别同比增长8.35%和17.99%,分别至9...
1699元能买到!荣耀Power有这些优缺点,选它续航焦虑真没了! - 天天要闻

1699元能买到!荣耀Power有这些优缺点,选它续航焦虑真没了!

有一天,一款主流手机的电池容量来到了8000mAh,且最关键的是,这样的产品并没有过多的牺牲手感,甚至可以说手感比主流旗舰机还好,这样的一款手机也许会在其他方面稍微有所妥协,但不得不说,它确实从根源上杜绝了我们的续航焦虑问题。没错了!今天咱们来聊聊荣耀POWER,一款定价在千元左右产品,按照笔者的理解,荣耀是将...
倒计时3天!第二届“兴智杯”全国人工智能创新应用大赛即将启动,线上直播预约开启 - 天天要闻

倒计时3天!第二届“兴智杯”全国人工智能创新应用大赛即将启动,线上直播预约开启

前期,工业和信息化部、科学技术部、深圳市人民政府共同主办了首届“兴智杯”全国人工智能创新应用大赛(以下简称“大赛”),以需求为牵引,推动了一批关键技术加快突破,加快人工智能与重点行业融合赋能,成为了目前国内规模最大、参赛主体最丰富的人工智能专业赛事。为进一步发挥“以赛促研、以赛促用、以赛育人”的作用...
国产芯片杀疯了!利润暴涨26倍,这些小芯片藏着大突破 - 天天要闻

国产芯片杀疯了!利润暴涨26倍,这些小芯片藏着大突破

最近翻看国产芯片企业的成绩单,可把我这个外行人看乐了——利润动辄涨个两三倍都是常规操作,最夸张的翻了26倍!您别误会,这可不是在炒股,而是实打实的造芯片挣来的真金白银。要说这波国产替代的浪潮,还真让咱们在芯片领域啃下了几块硬骨头。先说个身边
iStorage 推出 26TB 容量 diskAshur 加密硬盘,1541 美元起 - 天天要闻

iStorage 推出 26TB 容量 diskAshur 加密硬盘,1541 美元起

IT之家 5 月 5 日消息,硬盘制造商 iStorage 宣布推出 26TB 版本 diskAshur DT2/3 系列加密硬盘,相应硬盘主打“提供物理密码按键”,其中 diskAshur DT2 26TB 版本售价为 1541 美元(IT之家注:现汇率约合 11147 元人民币),diskAshur DT3 26TB 版本定价为 1814 美元(现汇率约
无线信号增强秘籍,桥接和中继模式哪个更强? - 天天要闻

无线信号增强秘籍,桥接和中继模式哪个更强?

【ZOL中关村在线原创技术解析】随着无线通信与计算机技术飞速发展,人们愈发渴望随时随地享受稳定的数据通信服务。无线路由器作为无线网络核心设备,作用关键。但当其信号覆盖不足,如穿过两堵墙后信号微弱时,可通过无线桥接或中继模式连接两个无线路由器,扩展网络、增强信号。中继模式和桥接模式虽都能扩展网络覆盖,但...
流畅更耐用 魅族Note 16将预装Flyme 12 - 天天要闻

流畅更耐用 魅族Note 16将预装Flyme 12

魅族官方透露,将于5月发布的魅族Note 16系列将出厂预装Flyme 12新系统,这也是Flyme系统大版本首次在非旗舰机型上首发。魅族Note 16搭载紫光展锐T765处理器,配备6.78英寸LCD屏,分辨率达2460*1080。后置采用八边形相机模组,由5000万像素主摄和200万像素镜头组成。续航方面,内置6600mAh大容量电池,支持40W有线充电