Skip to content

Latest commit

 

History

History
141 lines (81 loc) · 10.9 KB

File metadata and controls

141 lines (81 loc) · 10.9 KB

零、前言

众所周知,并发性很难正确实现,但幸运的是,Python 编程语言使处理并发变得容易处理。本书展示了如何使用 Python 以其独特的编程形式编写高性能、健壮、并发的程序。

本书专为任何对构建快速、无阻塞和节省资源的系统应用感兴趣的好奇开发人员而设计,本书将介绍帮助您将并发性纳入系统的最佳实践和模式。此外,还将讨论 Python 并发编程中的新兴主题,包括新的 AsyncIO 语法、“锁不锁任何东西”这一广为接受的观点、原子消息队列的使用、并发应用体系结构和最佳实践。

我们将通过实际操作和引人入胜的代码示例来处理复杂的并发概念和模型。阅读本书之后,您将对 Python 并发生态系统中的主要组件有了深入的理解,并对解决实际并发问题的不同方法有了实际的了解。

这本书是给谁的

如果您是一位熟悉 Python 的开发人员,并且希望学习通过利用单核、多核或分布式并发来构建可扩展的高性能应用,那么本书适合您。

这本书涵盖的内容

第一章并发和并行编程高级入门向您介绍了并发的概念,并演示了一个实例,其中并发编程可以显著提高 Python 程序的速度。

第 2 章Amdahl 定律从理论上探讨了并发在提高应用速度方面的局限性。我们将看一看并发真正提供了什么,以及如何最好地合并它。

第 3 章在 Python中使用线程,介绍了线程的形式化定义,并介绍了在 Python 程序中实现线程的不同方法。在本章中,我们还将讨论并发编程中的一个主要元素同步的概念。

第 4 章在 Threads中使用 with 语句,将上下文管理的概念与 Python 并发编程的整体上下文中的线程化结合起来。我们将介绍上下文管理背后的主要思想,以及如何在各种编程实践中使用它,包括线程。

第 5 章并发 Web 请求介绍了并发编程的主要应用之一:Web 抓取。在讨论如何将线程技术应用于 web 刮取程序以实现显著的加速之前,本文还介绍了 web 刮取的概念以及其他相关元素。

第 6 章使用 Python处理流程,展示了多处理的形式化定义以及 Python 如何支持它。我们还将进一步了解线程和多处理之间的关键区别,它们常常相互混淆。

第 7 章流程中的约简操作符将约简操作和多处理的概念配对在一起,作为一种并行编程实践。本章将详细介绍还原操作的理论基础,以及它与多处理以及编程的一般关系。

第 8 章并发图像处理探讨了并发的一个具体应用:图像处理。除了一些最常用的处理技术外,还讨论了图像处理背后的基本思想。当然,我们将看到并发,特别是多处理,是如何加速图像处理任务的。

第 9 章异步编程简介将异步编程的形式化概念视为除线程和多处理之外的三种主要并发编程模型之一。我们将学习异步编程与前面提到的两种编程有何本质区别,但仍然可以加速并发应用。

第 10 章用 Python 实现异步编程深入探讨了 Python 为促进异步编程而提供的 API。具体来说,我们将学习asyncio模块,它是用 Python 实现异步编程的主要工具,以及异步应用的一般结构。

第 11 章使用 asyncio构建通信通道,将前面章节中涉及的异步编程知识与网络通信主题相结合。具体来说,我们将研究使用aiohttp模块作为工具向 web 服务器发出异步 HTTP 请求,以及实现异步文件读/写的aiofile模块。

第 12 章死锁介绍了并发编程中常见的第一个问题。我们将学习经典的进餐哲学家问题,作为死锁如何导致并发程序停止运行的示例。本章还将介绍一些可能的死锁方法以及相关概念,如活锁和分布式死锁。

第 13 章饥饿考虑了并发应用中的另一个常见问题。本章通过对经典读者和作家问题的叙述来解释饥饿的概念及其原因。当然,我们还将通过 Python 中的实际例子讨论这些问题的潜在解决方案。

第 14 章竞态条件讨论了最著名的并发问题:竞态条件。我们还将讨论临界段的概念,它是特定竞争条件下的一个基本元素,以及一般的并发编程。然后,本章将介绍互斥作为解决这一问题的潜在方法。

第 15 章全局解释器锁介绍了臭名昭著的 GIL,它被认为是 Python 并发编程的最大挑战。我们将了解 GIL 实施背后的原因以及它带来的问题。本章最后给出了一些关于 Python 程序员和开发人员应该如何思考 GIL 并与之交互的想法。

第 16 章设计基于锁和无互斥的并发数据结构,分析了设计两种常用的并发数据结构的过程,这两种并发数据结构将锁作为同步机制:基于锁和无互斥。本章将对数据结构的实现及其性能进行一些高级分析,以便读者在设计并发应用时形成批判性思维。

第 17 章原子类型的内存模型和操作包括理论主题,涉及 Python 语言的底层结构以及程序员如何在并发应用中利用这些结构。本章还向读者介绍了原子操作的概念。

第 18 章从头开始构建服务器指导读者在低层构建非阻塞服务器的过程。我们将学习 Python 中 socket 模块提供的网络编程功能,以及如何使用它们来实现正常运行的服务器。我们还将应用本书前面讨论的异步程序的一般结构,将阻塞服务器转换为非阻塞服务器。

第 19 章测试、调试和调度并发应用涵盖了并发程序的更高级别使用。本章将首先介绍如何通过 APScheduler 模块将并发应用于调度 Python 应用的任务。然后,我们将在测试和调试 Python 程序的主题中讨论并发性带来的复杂性。

充分利用这本书

本书的读者应该知道如何在开发环境中执行 Python 程序,或者仅仅通过命令提示符执行。他们还应该熟悉 Python 编程中的一般语法和实践(变量、函数、导入包等等)。一些基本的计算机科学知识的元素,如像素,执行堆栈,字节码指令是假定在不同的点在这本书。

第 1 章并发和并行编程高级介绍的最后一节介绍了设置 Python 环境的过程。本书中的章节可能会讨论必须通过软件包管理器(如 pip 和 Anaconda)安装的外部库或工具的使用,有关如何安装这些库的具体说明包含在相应章节中。

下载示例代码文件

您可以从您的账户www.packt.com下载本书的示例代码文件。如果您在其他地方购买了本书,您可以访问www.packt.com/support并注册,将文件通过电子邮件直接发送给您。

您可以通过以下步骤下载代码文件:

  1. 登录或注册www.packt.com
  2. 选择“支持”选项卡。
  3. 点击代码下载和勘误表。
  4. 在搜索框中输入图书名称,然后按照屏幕上的说明进行操作。

下载文件后,请确保使用以下最新版本解压或解压缩文件夹:

  • WinRAR/7-Zip for Windows
  • 适用于 Mac 的 Zipeg/iZip/UnRarX
  • 适用于 Linux 的 7-Zip/PeaZip

该书的代码包也托管在 GitHub 上的https://github.com/PacktPublishing/Mastering-Concurrency-in-Python 。如果代码有更新,它将在现有 GitHub 存储库中更新。

我们的丰富书籍和视频目录中还有其他代码包,请访问**https://github.com/PacktPublishing/** 。看看他们!

下载彩色图像

我们还提供了一个 PDF 文件,其中包含本书中使用的屏幕截图/图表的彩色图像。您可以在这里下载:https://www.packtpub.com/sites/default/files/downloads/9781789343052_ColorImages.pdf

行动中的代码

访问以下链接查看正在运行的代码的视频:http://bit.ly/2BsvQj6

使用的惯例

本书中使用了许多文本约定。

CodeInText:表示文本中的代码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 句柄。下面是一个示例:asyncio模块提供了许多不同的传输类

代码块设置如下:

async def main(url):
    async with aiohttp.ClientSession() as session:
        await download_html(session, url)

当我们希望提请您注意代码块的特定部分时,相关行或项目以粗体显示:

urls = [
    'http://packtpub.com',
    'http://python.org',
    'http://docs.python.org/3/library/asyncio',
    'http://aiohttp.readthedocs.io',
    'http://google.com'
]

任何命令行输入或输出的编写方式如下:

> python3 example5.py
Took 0.72 seconds.

粗体:表示您在屏幕上看到的新术语、重要单词或单词。例如,菜单或对话框中的单词出现在文本中,如下所示。下面是一个示例:“要下载存储库,只需单击窗口右上角的克隆或下载按钮。”

Warnings or important notes appear like this. Tips and tricks appear like this.

联系

我们欢迎读者的反馈。

一般反馈:如果您对本书的任何方面有疑问,请在邮件主题中注明书名,并发送电子邮件至 customercare@packtpub.com

勘误表:尽管我们已尽一切努力确保内容的准确性,但还是会出现错误。如果您在本书中发现错误,如果您能向我们报告,我们将不胜感激。请访问www.packt.com/submit-errata,选择您的书籍,点击 errata 提交表单链接,并输入详细信息。

盗版:如果您在互联网上发现我们作品的任何形式的非法复制品,请您提供我们的位置地址或网站名称,我们将不胜感激。请通过copyright@packt.com与我们联系,并提供该材料的链接。

如果您有兴趣成为一名作家:如果您对某个主题有专业知识,并且您有兴趣撰写或贡献一本书,请访问authors.packtpub.com

评论

请留下评论。一旦你阅读并使用了这本书,为什么不在你购买它的网站上留下评论呢?然后,潜在读者可以看到并使用您的无偏见意见做出购买决定,我们 Packt 可以了解您对我们产品的看法,我们的作者可以看到您对他们书籍的反馈。非常感谢。

有关 Packt 的更多信息,请访问Packt.com