python调用c程序

发布时间 2023-05-04 17:36:36作者: hziwei

C代码

文件名 《task.c》

# include<stdio.h>

int task(){
	int i,j,k;
	unsigned long s = 0;
	for(i=0;i<1000;i++){
		for(j=0;j<1000;j++){
			for(k=0;k<1000;k++)	{
			    s = s + i + j + k;
			}
		}
}
	return s;
}

编译 在task.c文件目录上打开命令行

gcc -o task.dll -shared -fPIC task.c
或
gcc -o task.so -shared -fPIC task.c

python 代码

from ctypes import cdll, c_long
from time import time

start = time()
dll = cdll.LoadLibrary('./task.so')
dll.task.restype = c_long
r = dll.task()

end = time()
print("c, so: time:{time},result:{r}".format(time=end - start, r=r))

start = time()
dll = cdll.LoadLibrary('./task.dll')
dll.task.restype = c_long
r = dll.task()
end = time()
print("c, dll: time:{time},result:{r}".format(time=end - start, r=r))

start = time()


def task():
    s = 0
    for i in range(1000):
        for j in range(1000):
            for k in range(1000):
                s = s + i + j + k
                pass
            pass
        pass
    return s


r = task()

end = time()
print("c, py: time:{time},result:{r}".format(time=end - start, r=r))

结果

c, so: time:1.400615930557251,result:1498500000000
c, dll: time:1.2574799060821533,result:1498500000000
c, py: time:56.563599824905396,result:1498500000000