2013-03-07 57 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文件。

相關問題