python调用c程序
C代码
文件名 《task.c》
# include<stdio.h>
int task(int n, int p, int m){
int i,j,k;
unsigned long s = 0;
for(i=0;i<n;i++){
for(j=0;j<p;j++){
for(k=0;k<m;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, c_int
from time import time
start = time()
dll = cdll.LoadLibrary('./task.so')
# 指定函数入参类型
dll.task.argtype = [c_int, c_int, c_int]
# 指定函数返回类型
dll.task.restype = c_long
r = dll.task(1000, 2000, 1000)
end = time()
print("c, so: time:{time},result:{r}".format(time=end - start, r=r))
start = time()
dll = cdll.LoadLibrary('./task.dll')
# 指定函数入参类型
dll.task.argtype = [c_int, c_int, c_int]
# 指定函数返回类型
dll.task.restype = c_long
r = dll.task(1000, 2000, 1000)
end = time()
print("c, dll: time:{time},result:{r}".format(time=end - start, r=r))
start = time()
def task(n, p, m):
s = 0
for i in range(n):
for j in range(p):
for k in range(m):
s = s + i + j + k
pass
pass
pass
return s
r = task(1000, 2000, 1000)
end = time()
print("c, py: time:{time},result:{r}".format(time=end - start, r=r))
结果
c, so: time:2.56765079498291,result:3997000000000
c, dll: time:2.2216248512268066,result:3997000000000
c, py: time:113.5812668800354,result:3997000000000
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术