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

问题描述 投票:1回答:1

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

python standard-library .so
1个回答
4
投票

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

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

在性能受到关注的情况下,模块使用较低级别的语言编写,如C,然后编译为共享对象文件。这些文件可以由Python解释器加载,并像普通的python模块一样使用。因为这些模块已经编译成机器代码,所以它们可以直接执行而无需通过解释器,因此它们比用Python编写的等效代码快得多。

C这样的低级语言编写也可以有效地使用内存,甚至可以释放全局解释器锁,以便利用多核parellilism。像numpyscipy这样的科学模块就是这些模块的例子。

© www.soinside.com 2019 - 2024. All rights reserved.