Box
Box
Posts List
  1. Python 性能优化
    1. 简介
    2. Python和C++互相调用
    3. Ctypes 示例
    4. link

Python 性能优化

Python 性能优化

简介

主要优化方法:

  • 代码质量
  • 代码性能分析
    • cProfile 测试CPU运行
    • timeit 测试函数
    • memoryprofiler 监控 Python 代码的内存使用
    • lineprofiler 逐行性能分析
  • 解释器
    • Cpython
    • Psyco JIT解释器
    • PyPi
    • Cython
    • Jython
    • ccfi
  • C / C++ 扩展
    • ctypes
    • SWIG
  • 其他
    • Numba GPU加速

Python和C++互相调用

  • C++ 和 Python 忙等待文件夹内容
  • Python运行 C++停;C++停的时候唤醒Python

Ctypes 示例

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>

int add_int(int, int);
float add_float(float, float);

int add_int(int num1, int num2) {
return num1 + num2;
}

float add_float(float num1, float num2) {
return num1 + num2;
}

接下来将C文件编译为.so文件(windows下为DLL)。下面操作会生成adder.so文件

1
2
# for Mac
$ gcc -shared -Wl,-install_name,adder.so -o adder.so -fPIC add.c

现在在你的Python代码中来调用它

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from ctypes import *


# load the shared object file
adder = CDLL('./adder.so')

# find sum of integers
res_int = adder.add_int(4, 5)
print("Sum of 4 and 5 = " + str(res_int))

# find sum of floats
a = c_float(5.5)
b = c_float(4.1)

add_float = adder.add_float
add_float.restype = c_float
print("Sum of 5.5 and 4.1 = ", str(add_float(a, b)))

输出如下

1
2
3
(base) ➜  test-ctypes python3 test.py 
Sum of 4 and 5 = 9
Sum of 5.5 and 4.1 = 9.600000381469727
Supporting
Scan, Support Daidai
  • WeChat scan
  • Alipay scan