跳到主要內容

在 Python 中使用 DLL

參考網址:
如Py似C:Python 與 C 的共生法則
https://medium.com/pyladies-taiwan/%E5%A6%82py%E4%BC%BCc-python-%E8%88%87-c-%E7%9A%84%E5%85%B1%E7%94%9F%E6%B3%95%E5%89%87-568add0ba5b8

總共介紹三種方法,以下是該文介紹的第二種方法:ctypes 的節錄。

ctypes

ctypes 是 Python 提供的一個 library,可以在 Python 中匯入一些外部 dynamic-link library (DLL) 或 shared library,來調用其中的 function。
如果是已經存在的 library,可以直接從下面的第二步開始。現在假設我們想把前面提到自己寫的,很花時間運算的 slow_calc function 打包給 ctypes調用,且這個 function 寫在 speedup_performance.c 裡。
ctypes 簡單三步驟:
Step 1: 建立 Shared Library
首先用 gcc 建立 shared library,產生 speedup_performance.so 檔:
$ gcc -shared -fPIC speedup_performance.c -o speedup_performance.so
Step 2: 匯入 Library
接著在 Python 用 ctypes 提供的 function 來匯入剛剛建立的 so 檔:
from ctypes import *
m = cdll.LoadLibrary('./speedup_performance.so')
如此一來 library 中的 function 就能以 m.func() 取用。
Step 3: 呼叫 Function
調用的時候,需要傳入對應原 C function 中的 parameter types。這邊有列出每個 C type 對應的 ctypes type,例如我們需要傳入的 int 對應到 c_int
print(m.slow_calc(c_int(3), c_int(2), c_int(4)))
>>> 10

留言