前言

前言

最近几年,Python编程语言的人气急剧上升,其直观而有趣的语法及大量质量上乘的第三方库居功至伟。很多大学的编程入门和进阶课程,以及科学和工程等数值密集型领域,都选择将Python作为编程语言,它还被用于编写机器学习应用程序、系统脚本和Web应用程序。

大家普遍认为,Python解释器参考版CPython比C、C++和Fortran等低级语言效率低下。CPython之所以性能糟糕,是因为程序指令没有编译成高效的机器码,而是由解释器处理。虽然使用解释器有些优点,如可移植性以及可省略编译步骤,但在程序和机器之间增加了一个间接层,降低了执行效率。

多年来,已制定出很多克服CPython性能缺点的策略。本书旨在填补这方面的空白,介绍如何让Python程序的性能始终强劲。

本书介绍如何优化数值计算和科学代码,还涵盖了缩短Web服务和应用程序响应时间的策略,这些对很多读者都极具吸引力。

本书可按顺序从头到尾地阅读,但其中的每章也自成一体,所以如果你已熟悉前面的主题,可直接跳到感兴趣的部分。

涵盖的内容

第1章介绍如何评估Python程序的性能,以及找出并隔离速度缓慢代码的实用策略。

第2章讨论如何使用Python标准库和第三方Python模块提供的高效数据结构和算法来缩短程序的执行时间。

第3章提供了NumPy和Pandas包的使用指南。掌握这些包后,你就可使用简洁而富有表达力的接口来实现快速的数值算法。

第4章是一个Cython教程,这种语言使用与Python兼容的语法来生成高效的C语言代码。

第5章介绍可用来将Python代码编译成高效机器码的工具。在该章中,你将学习如何使用Numba和PyPy,其中前者是一个Python函数优化编译器,而后者是一个能够动态地执行并优化Python程序的解释器。

第6章提供了异步编程和响应式编程指南。你将学习重要的术语和概念,以及如何使用框架asyncio和RxPy编写整洁的并发代码。

第7章简要地介绍多核处理器和GPU并行编程。在该章中,你将学习如何使用模块multi-processing以及Theano和Tensorflow来实现并行性。

第8章是前一章内容的延伸,专注于在分布式系统上运行并行算法来解决大型问题和大数据处理问题。该章还介绍了Dask、PySpark和mpi4py库。

第9章讨论通用的优化策略,以及开发、测试和部署高性能Python应用程序的最佳实践。

需要什么

本书的示例代码都在Ubuntu 16.04系统中使用Python 3.5进行了测试,但这些示例大都能够在Windows和Mac OS X操作系统上运行。

推荐使用Anaconda发行包来安装Python和相关的库,这个发行包有用于Linux、Windows和Mac OS X的版本,可从https://www.continuum.io/downloads下载。

为谁而写

本书适合想要改善应用程序的性能并掌握了Python基本知识的Python程序员阅读。

排版约定

为将不同类型的信息区分开来,本书使用了很多文本样式。下面列出其中一些样式及其含义。

正文中的代码、数据库表名、用户输入,使用如下样式:“总之,我们将实现一个名为ParticleSimulator.evolve_numpy的方法,并使用基准测试将其同纯粹的Python版本(更名为ParticleSimulator.evolve_python)进行比较。”

代码块使用如下样式:

def square(x):
return x * x
 
inputs = [0, 1, 2, 3, 4]
outputs = pool.map(square, inputs)

要让你注意代码块的特定部分时,相关的代码行用粗体表示:

def square(x):
return x * x
 
inputs = [0, 1, 2, 3, 4]
outputs = pool.map(square, inputs)

命令行输入或输出使用如下样式:

$ time python -c 'import pi; pi.pi_serial()'
real 0m0.734s
user 0m0.731s
sys 0m0.004s

新术语和重要词语使用黑体字。

 此图标表示警告或重要的注意事项。

 此图标表示提示和技巧。

读者反馈

欢迎提供反馈,请将你对本书的看法告诉我们:哪些方面是你喜欢的,哪些方面你不喜欢。读者的反馈对我们来说很重要,因为这可帮助我们推出可最大限度发挥其功效的著作。

要给我们提供反馈,只需向feedback@packtpub.com发送电子邮件,并在主题中注明书名。

如果你有擅长的主题,并有志于写书或撰稿,请参阅www.packtpub.com/authors的撰稿指南。

客户支持

购买英文版图书后,你将获得各种帮助,让你购买的图书最大限度地发挥其功效。

下载示例代码

你可访问http://www.packtpub.com并使用你的账户下载本书的代码示例文件。如果你是在其他地方购买的本书,可访问http://www.packtpub.com/support并注册,以便我们将文件通过电子邮件发送给你。

要下载代码文件,可采取如下步骤。

(1) 访问我们的网站,使用电子邮件地址和密码注册并登录。

(2) 将鼠标指向页面顶部的标签SUPPORT。

(3) 单击Code Downloads & Errata。

(4) 在搜索框中输入书名。

(5) 选择要下载哪本书的代码文件。

(6) 从下拉列表中选择该书是在哪里购买的。

(7) 单击Code Download。

下载文件后,使用下列软件的最新版解压缩:

  • WinRAR / 7-Zip(Windows);
  • Zipeg / iZip / UnRarX(Mac);
  • 7-Zip / PeaZip(Linux)。

本书的示例代码还托管在GitHub上(https://github.com/PacktPublishing/Python-High-Performance-Second-Edition)。我们还在https://github.com/PacktPublishing/提供了众多图书的示例代码以及视频,敬请访问!

勘误

我们万分小心,力图让图书的内容准确无误,即便如此,错误也在所难免。如果你在出版的图书中发现错误(无论是正文还是代码中的错误),请告诉我们,我们将感激不尽。这样做将让其他读者免遭同样的挫折,还可帮助我们改进该书的后续版本。无论你发现什么错误,都请告诉我们。为此,你可访问http://www.packtpub.com/submit-errata,输入书名,单击链接Errata Submission Form,再输入你发现的错误的详情。1你提交的勘误得到确认后,将被上传到我们的网站或添加到既有的勘误列表中。

1中文版可访问图灵社区本书主页www.ituring.com.cn/book/2006提交勘误。——编者注

要查看已提交的勘误,请访问https://www.packtpub.com/books/content/support,并在搜索框中输入书名,Errata栏将列出你搜索的信息。

打击盗版

在网上发布盗版材料是个屡禁不绝的问题。在保护版权和许可方面,本社的态度非常严肃,如果你在网上看到本社作品的非法复制品,请马上把网址或网站名告诉我们,以便我们采取补救措施。

请通过copyright@packtpub.com与我们取得联系,并提供你怀疑的盗版材料的链接。

对于你为保护我们的作者和提供有价值内容的能力提供的帮助,我们感激不尽。

问题

无论你有什么与本书相关的问题,都可通过questions@packtpub.com与我们联系,我们将竭尽全力去解决。

电子书

扫描如下二维码,即可购买本书电子版。

{%}

目录

  • 版权声明
  • 前言
  • 致谢
  • 第 1 章 基准测试与剖析
  • 第 2 章 纯粹的Python优化
  • 第 3 章 使用NumPy和Pandas快速执行数组操作
  • 第 4 章 使用Cython获得C语言性能
  • 第 5 章 探索编译器
  • 第 6 章 实现并发性
  • 第 7 章 并行处理
  • 第 8 章 分布式处理
  • 第 9 章 高性能设计