在 Python 中调用 C 库
编写一个简单的 Python 程序:
import time
def sum(n):
total = 0
for i in range(1, n+1):
total += i
return total
if __name__ == "__main__":
start = time.time()
result = sum(int(1e9))
end = time.time()
duration = end - start
print(f"Result: {result}")
print(f"Duration: {duration:.2f}s")
在这段程序中,我们定义了一个 sum 函数,用于计算从 1 到 n 的数列和。
运行这段程序:
$ python main.py
Result: 500000000500000000
Duration: 23.29s
这段代码在运行 sum 函数的过程中消耗了大量时间。为了加速 sum 的计算,我们决定使用 C 语言实现 sum:
libsum.c:
#include <stdint.h>
int64_t sum(int64_t n) {
int64_t total = 0;
for (int64_t i = 1; i < n+1; i++) {
total += i;
}
return total;
}
编译为共享库:
gcc -o libsum.so libsum.c -shared -fPIC -Wl,-soname,libsum.so
重写 main.py,引入 C 库:
from ctypes import *
import time
libsum = CDLL('./libsum.so')
libsum.sum.restype = c_int64
libsum.sum.argtypes = [c_int64]
if __name__ == "__main__":
start = time.time()
result = libsum.sum(int(1e9))
end = time.time()
duration = end - start
print(f"Result: {result}")
print(f"Duration: {duration:.2f}s")
重新运行程序:
$ python main.py
Result: 500000000500000000
Duration: 0.94s
运行速度提升了 20 倍。C 语言实现的 sum 极大地加速了程序的运行。

浙公网安备 33010602011771号