python程序太慢。该如何加快速度?
总的来说,这是个棘手的问题。首先,下面列出了深入了解前需要记住的事情:
-
不同的Python实现具有不同的性能特征。本常见问题解答的重点是 CPython 。
-
行为可能因操作系统而异,尤其是在谈论 I / O 或多线程时。
-
在尝试优化任何代码 前 ,应始终找到程序中的热点(请参阅
profile
模块)。 -
编写基准脚本将允许您在搜索改进时快速迭代(请参阅
timeit
模块)。 -
强烈建议在可能引入隐藏在复杂优化中的回归之前,要有良好的代码覆盖率(通过单元测试或任何其他技术)。
话虽如此,加速Python代码有很多技巧。以下是一些可以达到可接受的性能水平的一般原则:
-
使您的算法更快(或更改为更快的算法)可以产生比尝试在代码中使用微优化技巧更大的好处。
-
使用正确的数据结构。参考文档 内置类型 和
collections
模块。 -
当标准库提供用于执行某些操作的原语时,可能(尽管不能保证)比您可能提出的任何替代方案更快。对于用C编写的原语,例如内置函数和一些扩展类型,这是真的。例如,请确保使用
list.sort()
内置方法或相关的sorted()
函数进行排序(有关适度高级用法的示例,请参阅 排序指南 )。 -
抽象倾向于创造间接性并迫使翻译更多地工作。如果间接级别超过完成的有用工作量,则程序将变慢。你应该避免过度抽象,特别是在微小的功能或方法的形式下(这通常也会对可读性产生不利影响)。
如果你已经达到纯 Python 允许的限制,那么有一些工具可以让你走得更远。 例如, Cython 可以将稍微修改的 Python 代码版本编译为 C 扩展,并且可以在许多不同的平台上使用。 Cython 可以利用编译(和可选的类型注释)来使代码明显快于解释运行时的速度。 如果您对 C 编程技能有信心,也可以自己 编写 C 扩展模块 。
参见
专门介绍 性能提示 的wiki页面。