python调用C动态链接库
c_dll.c
#include<stdio.h>
void my_add(int num){
long int result = 0;
long int i = 1;
for(i; i<=num; i++){
result += i;
}
printf("C从1到%d累加的计算结果为%ld",num,result);
}
编译C文件,生成so文件:
==gcc c_dll.c -shared -o c_dll.so -fPIC==
add.py
#! coding:utf-8
#! /usr/bin/env python
'''
python调用C动态链接库处理计算密集操作。
'''
import time
from ctypes import *
def main():
num = int(input("请输入整数值:"))
result = 0
start_time = time.time()
result = cdll.LoadLibrary("./c_dll.so") # 这里调用的是C源码编译后生成的动态链接库
print(dir(result.my_add))
result.my_add(num)
end_time = time.time()
print
print("总共用时%s"%(end_time-start_time))
p_start_time = time.time()
p_result = sum(xrange(num+1))
p_end_time = time.time()
print '-'*20
print 'Python从1到%s累加的计算结果为%s'%(num,p_result)
print '总共用时%s'%(p_end_time-p_start_time)
if __name__ == "__main__":
main()
执行结果
python c_add.py
请输入整数值:1000000000
C语言从1到1000000000累加的计算结果为500000000500000000
总共用时3.15723800659
--------------------
P从1到1000000000累加的计算结果为500000000500000000
总共用时11.5007269382