红联Linux门户
Linux帮助

Pythran:Python->C++的转换编译器

发布时间:2016-09-08 14:57:08来源:topspeedsnail.com作者:斗大的熊猫
Pythran是一个Python到C++转换工具,和Cython一样,它的目的也是提高Python代码的执行效率,但是它们在实现方法上有本质的不同。
Pythran的源代码:https://github.com/serge-sans-paille/pythran
 
Pythran图示:
Pythran:Python->C++的转换编译器
 
Python执行计算密集型的代码非常慢,和编译型语言C++相比,差了不止一个数量级。
本文以计算圆周率π为例,看看使用Pythran后,执行效率能提升多少。
 
计算π的Python代码(pi.py):
def pi(nsteps):
sum, step = 0.0, 1.0 / nsteps
for i in range(nsteps):
x = (i - 0.5) * step
sum += 4.0 / (1.0 + x**2)
return step * sum
print(pi(10000000))  # 步进次数越多越精确
Pythran:Python->C++的转换编译器
大概用时6.8s。
 
计算π的C++代码(pi.cpp):
#include <stdio.h>
double pi(size_t nsteps) {   // 算法和上面的Python代码一样
double sum = 0.0, step = 1.0 / nsteps;
for(size_t i = 0; i < nsteps ; ++i) {
double x = (i - 0.5) * step;
sum += 4.0 / (1.0 + x * x); 
}
return step * sum;
}
int main(int argc, char* argv[])
{
printf("%lf\n", pi(10000000));
return 0;
}
Pythran:Python->C++的转换编译器
大概用时0.13s。
 
使用Pythran
安装Pythran,我使用Ubuntu系统:
$ sudo apt-get install build-essential
$ sudo apt-get install libgmp-dev libblas-dev
$ sudo apt-get install python-dev python-ply python-networkx python-numpy
$ sudo pip install pythran
其它系统的安装参看Readme.。
 
创建要转为本地库的Python代码(fast_pi.py):
# 下面一行定义要导出的函数
#pythran export pi(int)
def pi(nsteps):
sum, step = 0.0, 1.0 / nsteps
for i in range(nsteps):
x = (i - 0.5) * step
sum += 4.0 / (1.0 + x**2)
return step * sum
 
直接转为本地so库:
$ pythran fast_pi.py
Pythran:Python->C++的转换编译器
 
在Python中使用fast_pi.so(test.py):
import fast_pi
print(fast_pi.pi(10000000))
Pythran:Python->C++的转换编译器
大概用时0.15s。
 
总结
纯Python计算π用时6.8s
纯C++计算π用时0.13s
使用Pythran把Python转为本地库计算π用时0.15s
Pythran的转换效率还是挺高的,和纯C++相差无己。
文档:https://pythonhosted.org/pythran/
 
本文永久更新地址:http://www.linuxdiyf.com/linux/23987.html