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

时间:2013-03-07 02:29:06

标签: 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
>>> 

3 个答案:

答案 0 :(得分:4)

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

此特定用途与效率无关 - 模块必须用C语言编写(或使用ctypes)才能使用此操作系统功能。

答案 1 :(得分:1)

用C语言编写的Cpython标准库中有很多东西。其他例子是itertools,部分csv_csv),部分collections_collections)......我认为其中一个主要原因是提高效率。开发人员决定,如果他们使用编译语言,他们可以让代码更快。

答案 2 :(得分:1)

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

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