python 异步处理
异步编程(简称异步)是许多现代语言的功能,它使程序可以处理多个操作,而无需等待或挂断其中的任何一个。 这是一种有效处理网络或文件I / O等任务的明智方法,其中程序的大部分时间都花在等待任务完成上。
考虑一个打开100个网络连接的Web抓取应用程序。 您可以打开一个连接,等待结果,然后打开下一个连接并等待结果,依此类推。 程序运行的大部分时间都花在等待网络响应上,而不是在做实际的工作。
异步为您提供了一种更有效的方法:一次打开所有100个连接,然后在返回结果时在每个活动连接之间切换。 如果一个连接没有返回结果,请切换到下一个,依此类推,直到所有连接都返回了它们的数据。
异步语法现在已成为Python的标准功能,但是习惯于一次做一件事的长期Pythonista使用者可能难以解决。 在本文中,我们将探讨异步编程如何在Python中工作以及如何使用它。
请注意,如果要在Python中使用异步,最好使用Python 3.7或Python 3.8(撰写本文时的最新版本)。 我们将使用该语言的这些版本中定义的Python异步语法和辅助函数。
何时使用异步编程
通常,使用异步的最佳时间是当您尝试执行具有以下特征的工作时:
- 这项工作需要很长时间才能完成。
- 延迟涉及等待I / O(磁盘或网络)操作,而不是计算。
- 这项工作涉及一次执行许多I / O操作, 或者当您还试图完成其他任务时进行一项或多项I / O操作。
异步允许您并行设置多个任务并有效地遍历它们,而不会阻塞应用程序的其余部分。
可以很好地与异步工作的一些任务示例:
- 网页抓取,如上所述。
- 网络服务(例如,Web服务器或框架)。
- 协调来自多个源的结果的程序,这些结果需要很长时间才能返回值(例如,同时进行的数据库查询)。
重要的是要注意,异步编程不同于多线程或多处理。 异步操作都在同一个线程中运行,但是它们根据需要相互转化,这使得异步处理比线程或多处理多种任务的效率更高。 (更多有关此内容。)