- 内容提要
- 前言
- 作者简介
- 封面简介
- 第1章 理解高性能 Python
- 第2章 通过性能分析找到瓶颈
- 2.1 高效地分析性能
- 2.2 Julia 集合的介绍
- 2.3 计算完整的 Julia 集合
- 2.4 计时的简单方法——打印和修饰
- 2.5 用 UNIX 的 time 命令进行简单的计时
- 2.6 使用 cProfile 模块
- 2.7 用 runsnakerun 对 cProfile 的输出进行可视化
- 2.8 用 line_profiler 进行逐行分析
- 2.9 用 memory_profiler 诊断内存的用量
- 2.10 用 heapy 调查堆上的对象
- 2.11 用 dowser 实时画出变量的实例
- 2.12 用 dis 模块检查 CPython 字节码
- 2.13 在优化期间进行单元测试保持代码的正确性
- 2.14 确保性能分析成功的策略
- 2.15 小结
- 第3章 列表和元组
- 第4章 字典和集合
- 第5章 迭代器和生成器
- 第6章 矩阵和矢量计算
- 第7章 编译成 C
- 第8章 并发
- 第9章 multiprocessing 模块
- 第10章 集群和工作队列
- 第11章 使用更少的 RAM
- 第12章 现场教训
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
7.2 JIT 和 AOT 编译器的对比
我们将要查看的工具大体分为两类:提前编译工具(Cython、Shed Skin、Pythran)和“即时”编译工具(Numba、PyPy)。
通过提前编译(AOT),你会创建一个为你的机器定制的静态库。如果你下载了numpy、scipy或scikit-learn,它就会在你的机器上用Cython编译部分的库(或者如果你正在使用像Continuum’s Anaconda之类的分发包,你就会使用一个事先构建的预编译库)。通过在使用之前编译的方式,你就会获得一个能够在工作中立即拿来使用来解决你的问题的库。
通过即时编译,你不必提前做很多(如果有的话),你让编译器在使用时只逐步编译恰到好处的那部分代码。这就意味着你会有“冷启动”问题——如果你的大部分代码能够被编译并且当前都还没有被编译过,当你开始运行代码而且正在被编译时,就会跑得很慢。如果这事在你每次运行脚本时都发生,并且你运行这脚本很多次,开销就会变得很显著。PyPy会遭受这个问题,所以你可能不想要用它来处理短小且频繁运行的脚本。
当前情形向我们展示了提前编译可以给我们带来最快的速度提升,但这经常会需要大量的人力。即时编译提供了印象深刻的速度提升而且几乎不需要人工干预,但是它也会遇到刚才描述到的问题。当为你的问题选择正确的技术时,你不得不思考这些权衡问题。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论