第 4 章 异步、并发和 Starlette 之旅
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
Starlette 是一个轻量级 ASGI 框架/工具包,是用 Python 构建异步网络服务的理想选择。
汤姆-克里斯蒂,Starlette 的创造者
预览
上一章简要介绍了开发人员在编写新的 FastAPI 应用程序时首先会遇到的问题。 本章强调了 FastAPI 的底层 Starlette 库,尤其是它对异步处理的支持。 在概述了 Python 中 "同时做更多事情 "的多种方法后,您将看到其较新的async 和await关键字是如何融入 Starlette 和 FastAPI 的。
星莱特
FastAPI 的大部分网络代码都基于汤姆-克里斯蒂(Tom Christie)创建的Starlette 软件包。 Starlette 本身可以作为一个网络框架使用,也可以作为其他框架(如 FastAPI)的库使用。 与其他网络框架一样,Starlette 处理所有常见的 HTTP 请求解析和响应生成。它与 Flask 的基础软件包Werkzeug 相似,。
但它最重要的功能是支持现代 Python异步网络标准:ASGI。到目前为止,大多数 Python 网络框架(如 Flask 和 Django)都是基于传统的同步WSGI 标准。由于网络应用如此频繁地连接到慢得多的代码(如数据库、文件和网络访问),ASGI 避免了基于 WSGI 应用程序的阻塞和繁忙等待。
因此,Starlette 和使用它的框架是 Python 速度最快的网络软件包,甚至可以与 Go 和 Node.js 应用程序相媲美 。
并发类型
在详细介绍 Starlette 和 FastAPI 提供的异步支持之前,我们有必要了解一下实现并发的多种方法。
在并行计算中,一项任务同时分布在多个专用 CPU 上。这在图形和机器学习等 "数字计算 "应用中很常见。
在并发计算中,每个 CPU 在多个任务之间切换。 有些任务比其他任务耗时更长,我们希望减少所需的总时间。 读取文件或访问远程网络服务比在 CPU 中运行计算要慢数千到数百万倍。
网络应用程序做了很多这种缓慢的工作。 我们怎样才能使网络服务器或任何服务器运行得更快? 本节讨论了一些可能性,从整个系统到本章的重点:FastAPI 对 Python 的async 和await 的实现。
分布式和并行计算
如果你有一个非常大的应用程序--在单个 CPU 上运行会很费劲--你可以将它分解成几个部分,让这些部分在单台机器或多台机器的不同 CPU 上运行。你可以用很多很多方法来做到这一点,如果你有这样一个应用程序,你已经知道了其中的一些方法。 管理所有这些部分比管理单台服务器更复杂、更昂贵。
在本书中,我们将重点介绍可安装在单个盒子上的中小型应用程序,这些应用程序可以混合使用同步和异步代码,并由 FastAPI 进行很好的管理。
操作系统进程
操作 系统(或称操作系统,因为打字很疼)调度资源:内存、CPU、设备、网络等。它运行的每个程序都在一个或多个进程中执行代码。 操作系统为每个进程提供受管理、受保护的资源访问权限,包括它们何时可以使用 CPU。
大多数系统使用抢占式进程调度,不允许任何进程占用 CPU、内存或任何其他资源。操作系统根据其设计和设置,不断暂停和恢复进程。
对开发人员来说,好消息是:这不是你的问题!但坏消息(通常似乎是好消息的阴影)是:即使你想改变,也无能为力。 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access