针对 PyPy 进行优化

2024-04-19

(这是后续PyPy 的统计分析器 https://stackoverflow.com/questions/17346226/statistical-profiler-for-pypy)

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

在Python中,我会使用statprof or lineprofiler了解哪些线路导致速度变慢并尝试解决它们。但在 PyPy 中,这两个工具并没有真正报告合理的结果,因为 PyPy 可能会优化掉一些行。我也不想使用cProfile因为我发现很难提取报告功能的哪一部分是瓶颈。

有人对如何进行有一些建议吗?也许另一个在 PyPy 下工作得很好的分析器?一般来说,如何为 PyPy 优化 Python 代码?


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

请记住,执行此操作时,PyPy 具有与 cPython 截然不同的性能特征。始终尝试以尽可能简单的方式编写代码(顺便说一句,这并不意味着行数尽可能少)。还有一些其他启发式方法可以提供帮助,例如使用专门的列表、当您拥有少量基本常量的键时使用对象而不是字典、避免使用 C Python API 进行 C 扩展等。

如果您真的非常坚持尝试在生产线级别进行优化。有几种选择。一种称为 JitViewer(https://foss.heptapod.net/pypy/jitviewer https://foss.heptapod.net/pypy/jitviewer),这将使您对 JIT 对代码所做的事情有一个非常低层次的了解。例如,您甚至可以看到与 Python 循环相对应的汇编指令。使用该工具,您可以真正了解 PyPy 对代码某些部分的处理速度有多快,因为您现在可以做一些愚蠢的事情,例如计算循环使用的汇编程序指令的数量或其他操作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

针对 PyPy 进行优化 的相关文章

随机推荐

  • PHPStorm + XDebug 设置演练

    直到最近 我一直在用 PHP 通过 Notepad 编写代码 并通过检查 IIS 中的日志进行调试 一定喜欢那个 Web 平台安装程序 从那时起 我决定更新到更高效的代码编写 测试环境 并在使用 PHPStorm 玩了一会儿之后 决定购买它
  • 使 Chart.js 在悬停时在散点图中的点之间呈现一条线

    我有一个包含两个数据集的简单散点图 active and passive const data datasets label Active sentences A1 A2 A3 data 0 4340433805869016 0 12813
  • 如何在输入中使用 angular2 datepipe

    我有一个来自我的服务器的日期字符串 如下所示 1992 05 26T18 30 00Z 我正在尝试使用日期管道将其格式化为 DD MM YYYY 格式并将其绑定到我的输入 ngModel var userdate any new Date
  • 如何在没有互联网的情况下安装 angular-cli

    如果你只有 zip 文件来安装 angular cli 如何在没有互联网连接的情况下安装它 有了那个邮政编码只有你不会能够实现这一点 因为在bin文件夹 将ng仍然需要一些依赖 为了做到这一点 从官方存储库下载 zip https gith
  • Gradle 未针对 Firebase 云消息传递进行编译

    我注意到 Firebase API 已从 v 9 0 0 升级到 v 9 0 1 因此决定对此进行更改 然而 它并没有引起人们的注意 这是 Gradle Logcat 中的错误 Error 25 13 Failed to resolve c
  • 如果没有 sudo,则无法在 Qt 应用程序中使用键盘

    我有一个在 BeagleBone Black 上运行的交叉编译的嵌入式 Qt 应用程序 它工作正常 但有一件事 如果我不直接在 BeagleBone Black 上运行 它不接受键盘输入sudo 这是一个问题 因为 我无法远程调试应用程序并
  • 如何将多个 Range 对象合并为一个,用作图表源

    我正在尝试制作一个图表 其中多列作为源区域 基本上 我想选择特定的列 跳过一些列 然后将它们全部合并到一个范围中 我设置了一个循环 在其中创建一个范围 并将其地址附加到一个字符串中 并用逗号分隔它们 我很确定这就是 Excel 想要的格式
  • 无法添加自定义 Sonos 服务的帐户

    我创建了 Sonos 音乐服务 并使用 Customsd 将其添加到我的扬声器中 两个端点 URL 常规和安全 均可用 服务已成功添加到扬声器 使用 SoapUI 我可以发送 GetSessionId 的 https 请求 它会返回有效的响
  • textbox1.Text 无法从另一个表单复制 textbox2.Text 值[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 下面是我的代码 private void btnCptKb5 Click object sender EventArgs e Form1 f
  • 最大重叠矩形数

    我看过这个面试问题 但不知道如何回答 给定 N 个矩形 找出重叠矩形的最大数量 例如 对于左下点和右上点表示的矩形 1 1 3 3 2 2 4 4 1 3 2 4 2 2 3 3 返回 3 因为前两个和最后一个矩形重叠 我可以想到一个时间复
  • 努力绑定 tkinter 文本小部件中的标签

    我在 tkinter 模块中的文本小部件上遇到了一些困难 我添加了尝试将函数绑定到的标签 无论我如何输入 它都会发生以下两种情况之一 我可以单击文本小部件 但弹出的唯一功能是最后一个项目 无论我单击何处 第二件事是它会自动输出所有功能 对原
  • 使用 PIVOT 选择列值作为列

    我有一个场景 我希望将每个唯一列值 Val2 的列值 Val1 显示为单个列 最多 10 列 CREATE TABLE TEMP1 Val1 NVARCHAR 4 Val2 NVARCHAR 10 insert into Temp1 Val
  • 如何确定 .NET 中显示器的真实像素大小?

    我想在我的应用程序中以 真实尺寸 显示图像 为此 我需要知道显示器的像素大小 我知道 Windows 显示分辨率名义上是 96dpi 但出于我的目的 我想要更好的猜测 我知道这些信息可能并不总是可用或准确 例如较旧的 CRT 显示器 但我想
  • 如何覆盖 Material-UI MenuItem 选择的背景颜色?

    目前我正在努力设置背景颜色MenuItem选择不同颜色的组件 无需使用 important 来强制执行 组件代码
  • 检测 Javascript 中的操作系统版本并重定向

    Good Day 我做了一些研究 发现你可以使用以下 javascript 来检测用户操作系统 无论是 Android iOS Windows 等 var OSName Unknown OS if navigator appVersion
  • 如何将 Font Awesome 与 Polymer LitElement 结合使用

    我无法让 Font Awesome 图标与 LitElement 一起使用 因为 CSS 样式不会穿透自定义元素的阴影边界 是否可以将 Font Awesome 或其他图标与 LitElement 一起使用 聚合物材料库中有材料图标 那里使
  • xsl 尝试输出“<”而不是“<”

    Update 尽管与以前不太一样 但问题仍然存在 下面是输入内容 输出内容以及我想要输出内容的示例 输入示例 amp lt p amp gt amp lt span style amp quot font size medium amp q
  • Python - 查找字典中最长(最多单词)的键

    有没有一种方法可以快速查询字典对象以找到单词最多的键 所有键都是字符串类型 即 如果具有最大键的项目有五个单词 这是最大的键 3 我如何快速查询字典并返回 int 5 最好的 乔治娜 这将为您提供密钥 max d key lambda x
  • 如何使默认隐藏的控件显示在 Visual Studio 2010 WPF 设计器中?

    我有一个具有隐藏可见性的控件 因为它绑定到视图模型中的一个属性 该属性的默认值导致它被隐藏 我可以通过 XAML 访问它 但我希望它仍然显示在设计器中 有没有一种干净的方法可以做到这一点 目前 我正在手动编辑 可见性 属性以使其显示出来 但
  • 针对 PyPy 进行优化

    这是后续PyPy 的统计分析器 https stackoverflow com questions 17346226 statistical profiler for pypy 我正在 PyPy 下运行一些 Python 代码 并希望对其进