首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >针对PyPy进行优化

针对PyPy进行优化
EN

Stack Overflow用户
提问于 2013-06-28 01:40:13
回答 1查看 1.5K关注 0票数 10

(这是Statistical profiler for PyPy的后续)

我在PyPy下运行了一些Python代码,并希望对其进行优化。

在Python语言中,我会使用statproflineprofiler来了解导致速度减慢的确切原因,并尝试解决这些问题。然而,在PyPy中,这两个工具并不能真正报告合理的结果,因为PyPy可能会优化掉一些行。我也不喜欢使用cProfile,因为我发现很难提炼出报告的函数的哪一部分是瓶颈。

有没有人有一些关于如何进行的提示?也许是另一个在PyPy下运行良好的分析器?一般来说,如何为PyPy优化Python代码?

EN

回答 1

Stack Overflow用户

发布于 2013-10-21 07:27:58

如果您了解PyPy体系结构的工作方式,您就会意识到,试图精确定位单个代码行并不是真正有效率的。您可以从用RPython编写的Python解释器开始,然后通过跟踪JIT运行该解释器,跟踪JIT生成流图,然后转换这些图以优化RPython解释器。这意味着由RPython解释器运行的Python代码的布局可能与实际运行的优化汇编程序具有非常不同的结构。此外,请记住,JIT总是在循环或函数上工作,因此逐行获取统计数据并不那么有意义。因此,我认为cProfile对你来说可能真的是一个很好的选择,因为它会让你知道把优化集中在哪里。一旦您知道哪些函数是您的瓶颈,您就可以针对那些速度较慢的函数进行优化,而不是尝试修复一行Python代码。

在执行此操作时请记住,PyPy具有与cPython非常不同的性能特征。总是尝试以尽可能简单的方式编写代码(这并不意味着尽可能少的行数)。还有一些其他的启发式方法可以帮助你,比如使用专门的列表,当你有少量的常量键时,使用对象而不是字典,使用C Python API避免C扩展,等等。

如果你真的,真的坚持尝试在行级别进行优化。这里有几个选项。一个叫做JitViewer (https://foss.heptapod.net/pypy/jitviewer),它可以让你对代码做了什么有一个非常低层次的了解。例如,您甚至可以看到对应于Python循环的汇编指令。使用该工具,您可以真正感受到PyPy在某些代码部分的运行速度有多快,因为您现在可以做一些愚蠢的事情,比如计算用于循环的汇编指令的数量。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17349822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档