Skip to content. | Skip to navigation

Personal tools

Navigation

You are here: Home / Tutorial / Cython

Cython

編譯的話推薦使用nuitka 這個套件,混淆跟pyinstaller是最不推的 PS: 這是基於cython所開發的套件, 可以跨平台使用, 目前在win7/ win10/ ubuntu 上面使用正常, 可以包成library or 執行檔. 發現用這套件比 cython 原生更方便

PyPy 用 rpy 因此語法底層就限定靜態型別 相較 llvm 沒管這部份 程式員要自己檢查
HotPy 仿 tracemonkey 要執行數次後才做 just in time compile
再額外記錄 type 使用次數

導入 writelock
修改 runtime 內容 用 freeze/unfreeze 壓解 檔名用 sha 編碼 修改了 signature 造成 zip 能看到但解不開

pypy: 80 times faster Gentle Introduction on Youtube

Language Performance Benchmark

Lecture PDF

%cython
def var2(list v):
    cdef double m, x
    m = float(sum(v)) / len(v)
    return sum([(x-m)**2 for  x in v]) / len(v)
%timeit var2(v)

Plone

原始碼編譯 lxml 的過程,會決定是否使用 Cython 來編譯,雖然 lxml 使用 Cython 寫成,但不同版本的 Cython 可能導致 lxml 編譯失敗,建議不要使用 Cython 來編譯。

SWIG

當 C++ 與 Python 透過 SWIG 兜在一起的時候,C++ class 把資料傳到 Python wrapper object,再由 Python wrapper object 傳遞到下一個 Python wrapper object 然後在傳到 C++ class。如果是單純想把C/C++的資源快速移到像Ruby, Python這類語言上的話SWIG是滿好用的, 但是用起來就會很C/C++的Style因為只是單純透過SWIG產生的glue code做移植的動作, 個人是偏好用C API把需要的轉化成Target Language的Style移植過去(例如:建個Class把它更高階抽象化之類。如果需要 wrap 多種語言,就得使用 SWIG 沒更好方法了。