FreezeJ' Blog

python调用C动态链接库

2019-04-28

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
Tags: Python