2013-12-17 108 views
3

我對我的程序有一個簡單的計劃:用Python做所有的輸入解析和數據預處理,然後傳遞很多結構並調用我要用C編寫的ONCE數字運算函數 這裏是我的問題:什麼會更快(就執行速度而言)?用ctypes調用C函數還是用cython編寫它?cython vs ctypes函數執行速度

+1

使用用Cython保持在一起的C代碼大段對比VS ctypes的調用一個C功能的單一的時間不顯著不同。如果您在Cython中編寫函數,添加足夠的靜態類型以使其表現良好,那將更加有趣。它可能不是那麼快,但是Cython版本比C更易讀,並且更容易維護。 – eryksun

+0

這也將取決於你想要調用的確切代碼。對於一個人來說,cython的速度並不比我的python快(猜測我有更多的技巧可以學習),所以我傾向於使用ctypes來處理這種事情。然而,對於一大類問題,普通的numpy向量操作幾乎和使用cython或ctypes一樣快,所以先看看那裏,因爲它是最簡單的。 –

回答

1

給定無限次的優化代碼Ctypes可能會更快,因爲您可以儘可能多地將繁重的代碼推入編譯代碼。

cython採用類似python的代碼,並將其轉換爲C代碼,並提供很多注意事項和例外。如果cython是完美的,那麼它的編碼速度將與Python的C-API編碼一樣快。 cython是快速代碼開發的絕佳工具,但並不完美。

Ctypes將需要對輸入變量進行一些處理,以便將它們清理乾淨。如果你正在做一些公平的數據預處理,這可能不會成爲問題。

像往常一樣,你需要決定與編碼時間/代碼的可讀性/代碼的可重用性 執行速度是多麼的重要相比,這似乎很奇怪,我是唯一的執行速度感興趣,還是想在代碼做任何它蟒蛇。

相反地,蟒編碼的一般範例會傾向於與具有由Python包裝