WEB开发网
开发学院软件开发Python Pyrex 扩展并加速 Python 应用程序 阅读

Pyrex 扩展并加速 Python 应用程序

 2007-03-29 12:21:49 来源:WEB开发网   
核心提示: 虽然这个 Pyrex 函数看起来仍然比对应的 C 函数更加简单易读,但是它实际上最初的纯 Python 的版本更为复杂,Pyrex 扩展并加速 Python 应用程序(8),通过这种方式,在纯 Python 中展开后缀生成与最初的版本相比会对总体速度有些负面的影响,Pyrex 主页上使用一

虽然这个 Pyrex 函数看起来仍然比对应的 C 函数更加简单易读,但是它实际上最初的纯 Python 的版本更为复杂。通过这种方式,在纯 Python 中展开后缀生成与最初的版本相比会对总体速度有些负面的影响。在 Pyrex 中,正如您期望的一样,这些嵌套的循环都是很少花费时间的,因而我节省了转换和分时调度的代价:

清单 10. mint 函数 Pyrex 化优化后的速度结果$ ./hashcash_test.py hashcash_pyx3 >/dev/null
13.2270 seconds (166125 hashes per second)

当然,这比我开始的时候好多了。但是速度提高也不过是两倍。大部分时间的问题是(此处也是)消耗了太多的时间在对 Python 库的调用上,而我并不能对这些调用编写代码来提高速度。

令人失望的比较

速度提高 50% 到 60% 似乎是值得的。达到这个目标我并没有编写 多少 代码。但是如果您认为是在原来的 Python 版本中添加 两条 语句 import psyco;psyco.bind(_mint),那么这种加速方法就不会给您多深的印象:

清单 11. mint 函数 Psyco 化的加速结果$ ./hashcash_test.py hashcash_psyco >/dev/null
15.2300 seconds (157550 hashes per second)

换而言之,Psyco 之不过添加了两行通用的代码,就几乎能实现相同的目标。当然,Psyco 只能用于 x86 平台,而 Pyrex 可以在具有 C 编译器的所有环境上执行。但是对于这个特定的例子来说,os.popen('hashcash -m '+options) 的速度会比 Pyrex 和 Psyco 都快很多倍(当然,假设可以使用 C 工具 hashcash)。

何处是 Pyrex 的用武之地?

在最好的情况中,Pyrex 实际上可以产生非常快的代码。例如,Pyrex 主页上使用一个计算素数列表的数学函数来宣扬这个特性。所有涉及的操作都是对整型变量进行的,因此类型定义就可以极大地加速算法。这个 Pyrex 函数与纯 Python 的程序只有很少的不同:只是增加了几个声明:

上一页  3 4 5 6 7 8 9  下一页

Tags:Pyrex 扩展 加速

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接