在 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 极大地加速了程序的运行。

参考:[Python] 为什么我的Python可以运行C程序?| BiliBili

posted @ 2025-05-16 19:09  Undefined443  阅读(19)  评论(0)    收藏  举报