冻结的 Python 二进制文件会访问本地解释器和全局解释器锁(GIL)吗?

Posted

技术标签:

【中文标题】冻结的 Python 二进制文件会访问本地解释器和全局解释器锁(GIL)吗?【英文标题】:Would a frozen Python binary access the local interpreter and Global Interpreter Lock (GIL)? 【发布时间】:2013-04-13 13:00:36 【问题描述】:

我正在开发一台 Linux 多核机器,在该机器上我只需在命令行上使用解释器(实际上只是“python script.py”)同时多次调用相同的 Python 脚本。 我发现即使我在机器资源范围内,性能也比单个调用慢得多。我相信这是因为实例通过全局解释器锁(GIL)共享解释器 - 即无论如何,几个实例最终都运行“单核”。 如果我对脚本的冻结 Python 二进制版本 (http://wiki.python.org/moin/Freeze) 做同样的事情,那也会发生吗?我不相信,因为二进制“带有自己的解释器”?

【问题讨论】:

GIL 在单个 Python 进程中的线程之间共享。如果您正在运行脚本的多个实例,则这不适用。所以 GIL 以外的其他东西会导致您的问题。 【参考方案1】:

你的信念是错误的。 GIL 是流程全局的。独立的 CPython 进程不共享任何内容,甚至 GIL 也不共享。只有同一个进程中的线程竞争同一个全局锁。您看到的性能下降还有另一个原因。是的,对于冻结的可执行文件 IIUC,规则是相同的。

【讨论】:

嗯,这是有道理的。毕竟,CPython 本身只是另一个应用程序。感谢您的回答。

以上是关于冻结的 Python 二进制文件会访问本地解释器和全局解释器锁(GIL)吗?的主要内容,如果未能解决你的问题,请参考以下文章

为啥即使使用 QThreadPool,GUI 也会冻结?

使用 Python 子进程冻结到 FFMPEG

关于python包,模块,.pyc文件和文件导入理解

模块重要性之pyc文件(知识)

Python 随机访问文件

Python基础学习笔记