Lua:一个Python的秘密武器

来源:互联网 发布:mac iphone 铃声 编辑:程序博客网 时间:2024/05/01 19:47

Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。

世界上有三种谎言: 谎言,该死的谎言和基准测试

纯Python

大家好,今天我想分享一些不寻常的基准测试成果,它们论证了Python可以通过嵌入Lua而得到增强。这一过程始于我的朋友让我完成一些简单的任务用于比较Python和其他语言。以下是我们要做的基准测试。

图 1.0

Lua:一个Python的秘密武器

我们创建了两个数组,每个数组有500万个随机整数,然后比较他们。如果两个数组中相同索引的元素不相等(仅仅如此) ,执行“求和和更新”操作,据此我们得到了如下结果:

纯Python 初始化 7.01951003075

纯Python 求和 0.525348901749

这样,Python需要7秒初始化数组和另外0.52秒执行“求和和更新”操作。

我们能够让Python发挥更大的效能吗? 当然能,我们做到了! 让我们一起往下看

NumPy

显然NumPy能够更高效的对两个数组进行求和。它在数组初始化方面也有优势。

研究下下面的代码:

Lua:一个Python的秘密武器

输出:

Numpy 初始化 0.211035966873

Numpy 求和 0.0101628303528

我们可以看到NumPy数组初始化只需要0.2秒而Python需要7秒,比纯Python时间快35倍。 同样的是“求和更新操作”, NumPy用了0.0.1s,相比较Python用了0.5s, 快了50倍。非常令人印象深刻的数字!

PyPy

用PyPy运行纯python的代码(图1.0中)得到了和NumPy一致的结果:

通常 init 0.203986883163

通常 sum 0.0113749504089

C

现在让我们看看能从C语言里面得到什么样的结果。我的朋友声称他用不了5分钟就可以把这个函数用C语言写出来。好吧,他的确在5分钟内做到了,然后又花了1个小时调试这个函数。可能每个有经验的C程序员能马上发现问题所在。换句话说, 在C语言里面你不能直接声明这个500万个元素的数组,因为它太大了以至于程序栈里面放不下。 你应该做的是,用malloc函数把他放在堆里面。。 当我的朋友在苦心探索C代码时,我想知道怎么样在不用编写C自定义模块的情况下加速Python代码。 我已经找到了这个简单的办法。

Lua

Lua 是一门了不起的语言。它的代码是开源的,而且容易阅读和理解,所以很容易学。你可以在这里找到由Lua首席架构师Roberto Ierusalimschy编写的一份详细的权威的关于Lua全面的介绍。虽然它很简单, 但却是一个功能强大的工具,一件丰厚的编程艺术品。退一步说,Lua 是如今最快的动态语言之一。所以请不要低估它。Lua对于我们最重要的一个特性是它的整个解释器占用很小的内存——少于200K。这样我们可以无缝地把它嵌入到任何环境中以促进和加快进程。

这里是我们用Python封装的Lua写的基准测试:

Lua:一个Python的秘密武器

输出

LUA init: 0.080163

LUA sum: 0.007911

这个结果是惊人的!我们可以看到Lua比PyPy快,而且比Numpy都要快1.5-3倍,比纯Python快50-110倍!

1.Python 1x

2.NumPy 50x

3.PyPy 50x

4.Lua 100x

5.C 100x

正如你看到的那样,把Lua嵌入到Python中很容易,而且测试结果也很出色!因而,我们可以说当你需要加快你的Python代码中某些关键部分时Lua 无疑是个好帮手。 如今有许多的商业产品在使用Lua,譬如:Adobe Photoshop Lightroom,World of Warcraft,FarCry和 SimCity 4 等。

希望你喜欢这篇文章并希望它对你有用。

英文原文:http://alexeyvishnevsky.com/?p=248 
译者:geek123

0 0