第12章 性能优化、性能分析与并发性
“过早优化是祸根。”
——Donald Knuth,著名的计算机科学家和数学家
实际工作中,比性能更重要的东西有很多,如功能特性、健壮性、可维护性、可测性以及可用性等。这也是我们把性能这个主题放到最后来讲的原因之一。这里,我们将性能分析(Profling)作为关键技术,来介绍如何改善软件的性能。对于分布式多核系统,我们也会介绍相应的性能优化框架。
下面是本章将要讨论的相关主题。
- 代码的性能分析(Profling)。
- 安装Cython。
- 调用C代码。
- 利用multiprocessing创建进程池。
- 通过Joblib提高
for
循环的并发性。 - 比较Bottleneck函数与NumPy函数。
- 通过Jug实现MapReduce。
- 安装MPI for Python。
- IPython Parallel。
12.1 代码的性能分析
所谓性能分析,就是以收集程序运行时的信息为手段,找出代码中哪些部分较慢,或者占用内存较多。这里,我们将以第9章“分析文本数据和社交媒体”中的sentiment.py
为蓝本,稍作修改后,以此为例进行性能分析。对于这个程序,我们将按照多进程编程准则对其进行重构。本章后面的部分将对多进程技术展开进一步讨论。
此外,我们还会对停用词的过滤做进一步简化。最后,我们还会在不降低准确性的前提下,来进一步减少作为特征的单词。对于最后这一点,其效果最显著。原始代码的运行时间大约需要20s。而新的代码,其速度将会有明显提升,并将其作为本章的比较基准。某些代码修改与性能分析有关,这将在本节后面讲解。下列代码取自本书代码包中的prof_demo.py
文件:
import random from nltk.corpus import movie_reviews ...
Get Python数据分析 now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.