第12章 性能优化、性能分析与并发性

“过早优化是祸根。”

——Donald Knuth,著名的计算机科学家和数学家

实际工作中,比性能更重要的东西有很多,如功能特性、健壮性、可维护性、可测性以及可用性等。这也是我们把性能这个主题放到最后来讲的原因之一。这里,我们将性能分析(Profling)作为关键技术,来介绍如何改善软件的性能。对于分布式多核系统,我们也会介绍相应的性能优化框架。

下面是本章将要讨论的相关主题。

  • 代码的性能分析(Profling)。
  • 安装Cython。
  • 调用C代码。
  • 利用multiprocessing创建进程池。
  • 通过Joblib提高for循环的并发性。
  • 比较Bottleneck函数与NumPy函数。
  • 通过Jug实现MapReduce。
  • 安装MPI for Python。
  • IPython Parallel。

所谓性能分析,就是以收集程序运行时的信息为手段,找出代码中哪些部分较慢,或者占用内存较多。这里,我们将以第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.