为什么Python中的mmap是作为共享库实现的



我是python新手。但是我很好奇为什么python中的mmap是作为共享库实现的,而不是一个.py文件。这使得我的IDE无法索引mmap的源代码。

以下是python3.2环境(ubuntu 12.04)的输出:

markz@markz-hp6200:~$ python3.2
Python 3.2.3 (default, Oct 19 2012, 20:10:41) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import mmap
>>> print(mmap.__file__)
/usr/lib/python3.2/lib-dynload/mmap.cpython-32mu.so
>>> 

mmap使用了特定于操作系统的功能,例如Linux上的mmap函数(Windows上的MapViewOfFile函数)。这些在Python中不能直接使用(例如,通过os模块),因此mmap模块的至少一部分必须用C编写才能调用这些函数。

这个特殊的用法与效率无关——为了使用这个操作系统功能,该模块必须用C语言编写(或使用ctypes)。

在Cpython的标准库中有很多东西是用c编写的,其他的例子是itertools, csv的一部分(_csv), collections的一部分(_collections)…我认为其中一个主要原因是效率。开发人员认为,如果使用编译语言,他们可以让代码运行得更快。

mmap是用C语言实现的,而不是python。用C实现的扩展模块必须是共享库。

为什么?在这种情况下,可能是因为您无法在不访问c的情况下实现功能。在python中实现的模块是使用其他模块提供的功能实现的。但是mmap功能是通过调用C标准库函数来实现的。不可能是python文件

最新更新