Python调用C模块以及性能分析

一.c,ctypes和python的数据类型的对应关系

ctypes type ctype Python type
c_char char 1-character string
c_wchar wchar_t 1-character unicode string
c_byte char int/long
c_ubyte unsigned char int/long
c_short short int/long
c_ushort unsigned short int/long
c_int int int/long
c_uint unsigned int int/long
c_long long int/long
c_ulong unsigned long int/long
c_longlong __int64 or long long int/long
c_ulonglong unsigned __int64 or unsigned long long int/long
c_float float float
c_double double float
c_char_p char * (NUL terminated) string or None
c_wchar_p wchar_t * (NUL terminated) unicode or None
c_void_p void * int/long or None

2.操作int

3.操作字符串

4.操作指针

  • 通过pointer获取一个值的指针
  • 通过contents获取一个指针的值

5.c的结构体

6.访问so文件

1.创建一个c文件

2.编译成动态链接库

3.python中调用库中的函数

二.测试c的性能和python的差别

sum.c
#include

  • 测试方案:计算1-100的和
  • 测试次数:100万次

    1. 直接用c来执行,通linux 的time命令来记录执行的用时

    sum.c:

    测试结果的例子:

    real 1.16
    user 1.13
    sys 0.01

2.通过Python调用so文件和python的测试结果

sum_test.py:

测试结果的例子

3.测试erlang的测试结果

刚刚学了erlang,那就一起测试一下erlang的运算性能
sum.erl:

调用:

测试结果的例子:

4.测试结果

用上面的测试方法,进行10次测试,去除最大值和最小值,再计算平均值,得出:

Python调用c 原生的c Python erlang
0.95 0.48 8.47 2.43

单位:秒

  • 求和的运行,使用的内存比较小,但是占用CPU资源比较多。
  • 原生的C是最快的,Python调用c会稍微慢一点,原因是计算100的和的操作是在c里面做的,而执行100万次的逻辑是在python做的
  • erlang的性能虽然比c稍慢,但是也是不错的,
  • Python的运行效率惨不忍睹。。。
1 2 收藏 评论

相关文章

可能感兴趣的话题



直接登录
跳到底部
返回顶部