1328| 1
|
[编程开发] python 3.9.9 x64 去除GIL(全局解释器锁)版——让多线程不再鸡肋 |
请尊重分享者,本资源仅限交流未经楼主同意严禁转载或盈利,违者封号处理! 0x00 前言
最近玩python时想实现多进程多线程混合运行,了解到了GIL(全局解释器锁)的存在,关于GIL,可以参见下面的官方文档 https://docs.python.org/zh-cn/3/ ... al-interpreter-lock 也就是说,python的多线程并不能实现真正意义上的并行,虽然多进程没有GIL的问题,但是创建进程的开销、内存占用以及通信效率都是多进程的问题(更何况多线程多进程我全都想要),所以我开始尝试修改Cpython的源码以去除GIL,但未果。 后来某次在GitHub上发现了一个去除GIL的项目,并且被认为“有希望在未来几年里真正进入 CPython”(项目地址:https://github.com/cole**ury/nogil),本版python即基于此源码编译 0x01 过程 下载源码之后,查阅相关资料发现python源码可在Linux/Unix上直接编译运行(Linux/Unix的朋友可以直接去那个项目上git clone然后**ke就行了),但Windows上的编译却十分麻烦(主要是坑太多了),我便萌发了将其制作为安装包形式的想法。 查阅官方文档得知编译python源码需要VS2017环境,安装之后进入PCBuild文件夹,先下载依赖项,之后运行build.bat 第一次编译就报错了,后来经过多方排查后发现是该项目的作者使用了仅能运行于64位系统上的API函数,32位的编译就只能放弃了,执行命令:.\build.bat -p x64 编译完成,运行根目录下的python.bat即可打开python命令行 运行项目作者所修改版本**有的命令:import sys; print(sys.flags.nogil),无报错,编译成功 但是这虽然能在本机上使用,但不便于分发,源码中包含了太多不必要的文件,且文件位置与发行版python不符,因此需要将其做成msi安装包 制作msi安装**程中的坑特别多,每次编译了半个小时左右就突然给你报错,网上关于这方面的信息少之又少,因此只能自己手动排查,排查过程这里就不再赘述 最终在.\PCBuild\AMD64\en-us目录下生成了安装包与embed包(解压即用) 编译完成留念: 0x02测试 安装过程挺顺利的,一次成功 全家福: 接下来我们来验证其是否真正去除了GIL 测试代码如下(多线程跑死循环): [Python] 纯文本查看 **代码 ?
测试结果如下(对比测试环境为python3.9.5(即nor**l),测试时系统环境保持不变): 3.9.9-nogil: 3.9.5-nor**l: 我的电脑是四核,因此如果带有GIL的话,理论CPU占用率不高于25%,但在nogil版本中cpu占用更是跑满,因此可以验证GIL已成功去除。 接下来我们来看一看去除GIL后的性能表现如何 我们用一个计数器来模拟CPU密集型任务: [Python] 纯文本查看 **代码 ?
结果如下: nor**l单线程: nogil单线程: nor**l多线程: nogil多线程: 结果排名:nogil多线程>nor**l单线程>nor**l多线程>nogil单线程 可见去除GIL后多线程性能确实增加,但以单线程性能下降作为代价 再来用一个多任务测试(斐波那契、累加、阶乘,都运用了递归运算): [Python] 纯文本查看 **代码 ?
结果如下: nor**l: nogil: 可见在递归上nogil不管是单线程还是多线程都吊打nor**l 总的来说如果使用nogil版的python解释器的话,在其中运用多线程会获得不错的性能,但同时也应当在编程中注意避免使用单线程,还要注意线程安全问题 0x03 结果 两个文件,exe为安装包,压缩包为解压即用 腾讯哈勃扫描结果: https://habo.**.com/file/showdetail?md5=ae9b7507e2575b7c1d8f87354819b65f https://habo.**.com/file/showdetail?md5=c6ab002a9e353cc742add4f4cbb147d4 仅供测试所用,请勿用于实际生产环境 下载地址.txt(150 Bytes, 下载次数: 27)
此处内容付费可见
此处内容需要向楼主支付铜钱 才能显示 支付 2 铜钱 | |||||||
唵嘛呢叭咪吽
|
|||||||
| ||
免责声明:本站所有资源均收集自互联网,没有提供影片资源存储,也未参与录制、上传。若本站收录的资源涉及您的版权或知识产权或其他利益,请附上版权证明邮件告知,在收到邮件后24小时内删除。
Copyright © 2021 [三国情] 管理员邮箱:97889527#qq.com(#=@)