为什么有些 Python 标准库是用 .so 编写的,而其他大多数是用 .py 编写的?

mul*_*rse 2 python standard-library .so

大多数标准库是用 Python .py 文件编写的,但有些是在 Unix 上的 .so 文件和 Windows 上的 .pyd 文件中。例如 os 写在 os.py 中,而 pyexpat 写在 pyexpat.cpython-36m-darwin.so 中。这些 .so 库有什么特别之处?

Abh*_*yay 5

.so文件是共享对象文件,它们是编译后的共享库。他们通常用编译语言像CC++Go等等。

Python 是一种解释型语言,用它编写的代码往往很慢,因为解释器需要遍历正在执行的每一行代码,将其转换为某种中间字节码,然后最终执行字节码。这可能很慢。

在性能受到关注的情况下,模块是用较低级别的语言C编写的,然后将其编译为共享对象文件。这些文件可以由 Python 解释器加载并像普通的 Python 模块一样使用。因为这些模块已经编译成机器码了,所以不用经过解释器就可以直接执行,所以比用Python写的等价代码要快很多。

以较低级别的语言编写,例如C还可以有效地使用内存,甚至可以释放全局解释器锁以利用多核并行性。诸如numpy, 之scipy类的科学模块就是这些示例。