第10章 并发执行
在本章中,我们将更深入一步,不论是我们所讨论的概念还是本章的代码片段的复杂度,都将达到一个新的高度。如果读者还没有准备好迎接这个主题,或者粗读之后觉得难以理解,可以跳过本章的学习。什么时候觉得时机成熟,再回来阅读本章。
我们的计划是偏离熟悉的单线程执行模式,深入探索一种称为并发执行的模式。对于这个复杂的话题,我只打算讨论一些皮毛。因此当读者完成本章的学习之后,不可能就此成为并发编程的高手。但是,和往常一样,我希望本章的学习能够向读者灌输足够的知识,让读者知道怎样在这条道路上前行。
我们将学习与这个编程领域有关的所有重要概念,并讨论一些用不同的风格所编写的例子,使读者能够扎实地理解与这些话题有关的基础知识。为了深入探索这个极具挑战性并且充满趣味的编程分支,读者必须认真研读Python官方文档关于并发执行的内容,另外可能还需要补充阅读一些关于这个主题的书籍。
在本章中,我们打算探索下面这几个主题。
- 线程和进程背后的理论。
- 编写多线程代码。
- 编写多进程代码。
- 使用executor(执行器)生成线程和进程。
- 使用asyncio进行编程的一个简单例子。
我们先介绍一些理论知识。
10.1 并发与平行的比较
并发和平行常被误认为是同一个概念,但它们之间是存在区别的。并发是指同时运行多件事情的能力,但这些事情并不一定是平行发生的。平行是指能够同时运行一些事情。
想象一下,我们带着自己的伴侣去剧院看戏。剧院有两个检票口,一个用于VIP票,另一个用于常规票。剧院只有一位工作人员在检票。因此,为了避免堵塞任何一个队列,他在VIP窗口检一张票,然后在常规票窗口检一张票,如此循环。这样,两个队列都能得到处理。这就是并发的一个例子。
现在,假设有另一位工作人员也加入了检票,因此每个队列都有一位工作人员。这样,每个检票口都由各自的工作人员进行检票。这是平行的一个例子。 ...
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.