从Python 2.4移植旧应用程序

从Python 2.4移植旧应用程序,python,performance,Python,Performance,我有很多用Python 2.4编写的应用程序。我想把它们移植到更新版本的解释器上。假设我不需要语法特性,但我非常关心性能。那么,哪一个上层python版本最快、优化程度最高—2.4、2.5、2.6或2.7 非常感谢性能比较文章 多亏了总体而言,2.*行中的每个后续版本都比上一个版本快一点,因为优化和微调对于许多贡献者来说是一个高度优先事项 我不知道有任何关于性能配置的文章:我的建议是通过分析来确定特定应用程序的热点,但如果您非常关心性能,并将它们转换为微基准,以便在所有四个版本中按时运行,那么您

我有很多用Python 2.4编写的应用程序。我想把它们移植到更新版本的解释器上。假设我不需要语法特性,但我非常关心性能。那么,哪一个上层python版本最快、优化程度最高—2.4、2.5、2.6或2.7

非常感谢性能比较文章


多亏了

总体而言,2.*行中的每个后续版本都比上一个版本快一点,因为优化和微调对于许多贡献者来说是一个高度优先事项

我不知道有任何关于性能配置的文章:我的建议是通过分析来确定特定应用程序的热点,但如果您非常关心性能,并将它们转换为微基准,以便在所有四个版本中按时运行,那么您肯定已经在这样做了

例如,假设.join中等长度的短字符串列表是应用程序中的一个热点。然后,我们可以测量:

$ python2.4 -mtimeit -s'x=[str(i) for i in range(99)]' '"".join(x)'
100000 loops, best of 3: 2.87 usec per loop
$ python2.5 -mtimeit -s'x=[str(i) for i in range(99)]' '"".join(x)'
100000 loops, best of 3: 3.02 usec per loop
$ python2.6 -mtimeit -s'x=[str(i) for i in range(99)]' '"".join(x)'
100000 loops, best of 3: 2.7 usec per loop
$ python2.7 -mtimeit -s'x=[str(i) for i in range(99)]' '"".join(x)'
100000 loops, best of 3: 2.12 usec per loop

在这种情况下,python2.5并不遵循其他版本的总体趋势。重复测量证实,在这个微基准上,它比python2.4慢5%左右,2.7比预期快26%,比2.4快得惊人,但这是针对特定的构建和平台,当然也是针对特定的微基准,这就是为什么在您感兴趣的基准和平台/构建上执行此类度量非常重要的原因。如果您愿意接受一般的考虑,即以后的构建往往会更快,那么您就不太关心性能;-

一般来说,沿2.*行的每个后续版本都会比前一个版本快一点,因为优化和微调对于许多贡献者来说是一个高度优先事项

我不知道有任何关于性能配置的文章:我的建议是通过分析来确定特定应用程序的热点,但如果您非常关心性能,并将它们转换为微基准,以便在所有四个版本中按时运行,那么您肯定已经在这样做了

例如,假设.join中等长度的短字符串列表是应用程序中的一个热点。然后,我们可以测量:

$ python2.4 -mtimeit -s'x=[str(i) for i in range(99)]' '"".join(x)'
100000 loops, best of 3: 2.87 usec per loop
$ python2.5 -mtimeit -s'x=[str(i) for i in range(99)]' '"".join(x)'
100000 loops, best of 3: 3.02 usec per loop
$ python2.6 -mtimeit -s'x=[str(i) for i in range(99)]' '"".join(x)'
100000 loops, best of 3: 2.7 usec per loop
$ python2.7 -mtimeit -s'x=[str(i) for i in range(99)]' '"".join(x)'
100000 loops, best of 3: 2.12 usec per loop

在这种情况下,python2.5并不遵循其他版本的总体趋势。重复测量证实,在这个微基准上,它比python2.4慢5%左右,2.7比预期快26%,比2.4快得惊人,但这是针对特定的构建和平台,当然也是针对特定的微基准,这就是为什么在您感兴趣的基准和平台/构建上执行此类度量非常重要的原因。如果您愿意接受一般的考虑,即以后的构建往往会更快,那么您就不太关心性能;-

对每一个测试都涉及更新/重建使用Boost Python编写的C++扩展,这非常耗时…如果你不能孤立那些对它们没有影响的微基准,那么它们就涉及到扩展,这必须意味着扩展基本上占用了所有的时间,否则您可以在扩展不是瓶颈的地方隔离和测量性能相关的部分,因此,担心Python Uncel的性能是一个完全错误的想法。每个测试都涉及更新/重建使用Boost Python编写的C++扩展,这非常耗时……如果你不能孤立那些对它们没有影响的微基准,那么它们就涉及到扩展。这一定意味着扩展基本上一直都在占用时间,否则您可以隔离和度量扩展不是瓶颈的性能相关部分,因此担心Python本身的性能是完全错误的想法。