2013-03-07 68 views
2

我是新来的蟒蛇。但我很好奇,为什么Python中的mmap被实现为共享库,而不是.py文件。这使得我的IDE无法索引mmap的源代码。为什么Python中的mmap被实现为共享库?

这里是我的python3.2环境输出(Ubuntu的12.04):

[email protected]:~$ 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 
>>> 

回答

4

mmap使用特定于操作系统的工具,如Linux上的mmap函数(以及Windows上的MapViewOfFile函数)。这些都不是在Python(例如通过os模块)直接可用,所以mmap模块的至少一部分已被写入在C调用这些函数。

这种特殊的使用无关与效率 - 模块必须在C编写(或使用​​),才能使用此操作系统的功能。

+0

@eryksun:谢谢你的澄清。请注意,我不认为'ctypes'一定会很慢 - 我相信你使用'ctypes'来将指针转换成直接的Python缓冲区对象。但是,它作为一个C模块更有意义。 – nneonneo 2013-03-07 03:42:39

+0

好吧,nneonneo的解释很清楚。非常感谢! – 2013-03-07 05:24:15

1

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

1

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

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

相关问题