大多数标准库都是用Python .py文件编写的,但有些是在Unix上的.so文件和Windows上的.pyd文件中。例如,os是用os.py编写的,而pyexpat是用pyexpat.cpython-36m-darwin.so编写的。这些.so图书馆有什么特别之处?
.so
文件是共享对象文件,它们是编译的共享库。它们通常用C
,C++
,Go
等编译语言编写。
Python是一种解释型语言,编写的代码往往很慢,因为解释器需要遍历正在执行的代码的每一行,将其转换为某种中间字节代码,然后最终执行字节代码。这可能很慢。
在性能受到关注的情况下,模块使用较低级别的语言编写,如C
,然后编译为共享对象文件。这些文件可以由Python解释器加载,并像普通的python模块一样使用。因为这些模块已经编译成机器代码,所以它们可以直接执行而无需通过解释器,因此它们比用Python编写的等效代码快得多。
用C
这样的低级语言编写也可以有效地使用内存,甚至可以释放全局解释器锁,以便利用多核parellilism。像numpy
,scipy
这样的科学模块就是这些模块的例子。