Python 性能优化

Published: 01 Jun 2015 Category: 技术

最近将之前用 Python 写的一个工具进行了性能优化,把一些心得写下来。

原则

  • 单元测试 在进行性能优化的过程中,我充分体会到了进行单元测试的重要性。如果没有那些测试用例,那么对代码进行修改后,就很难保证整个代码的语义 没有发生变化,所以,切记:多写测试用例

  • 不要过早优化 在项目进行的初期,不必过于关注性能优化问题。原因在于,如果早期进行性能优化,那么可能会降低可读性,并且可能我们认为可以起到作用 的优化措施,根本不是性能瓶颈。事实往往是只有一小部分代码,占用了大部分时间。所以我们早期可以关注代码的可读性,可扩展性,等问题。 后期如果真的需要进行性能优化,再寻找性能瓶颈,然后集中力量对瓶颈处进行优化。

当然,不要过早优化,并不是说一点也不需要关心性能问题。早期设计时,我们就应该思考,对同一块数据,哪些操作使用的比较多,选用哪 种数据结构比较合适。

技巧

  • 使用新的解释器 官方提供的解释器是 CPython,而在换用 PyPy 后,同样的代码几乎可以透明地提升数倍的性能。

  • set 与 list 仔细思考需要使用 set 还是 list,如果有大量的 x in foo 这样的操作,应该选用 set 而不是 list

  • cProfile 官方的库中提供了 cProfile,帮助我们分析每个函数消耗的时间,便于我们找到性能瓶颈。