第4章. 非同期、同時実行、スターレットツアー
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
Starlette は軽量なASGIフレームワーク/ツールキットで、Pythonで非同期ウェブサービスを構築するのに適している。
トム・クリスティ(スターレット開発者
プレビュー
前の章では、開発者が新しい FastAPI アプリケーションを書くときに最初に遭遇することを簡単に紹介した。 この章では、FastAPI の基礎となる Starlette ライブラリ、特に非同期処理のサポートに重点を置く。 Python で「一度に多くのことを行う」複数の方法を概観した後、新しいasync とawaitキーワードが Starlette と FastAPI にどのように組み込まれているかを見る。
スターレット
FastAPIのウェブ・コードの大部分()は、Tom Christieが作成したStarletteパッケージに基づいている。Starletteは、それ自体でウェブ・フレームワークとして使うこともできるし、FastAPIのような他のフレームワークのライブラリとして使うこともできる。 他のウェブ・フレームワークと同様に、Starletteは通常のHTTPリクエスト・パースとレスポンス生成をすべて処理する。 これは、Flaskの基盤となっているWerkzeugパッケージと似ている()。
しかし、その最も重要な特徴は、最新のPython非同期Web標準:ASGIをサポートしていることだ。これまで、ほとんどのPython Webフレームワーク(FlaskやDjangoなど)は、従来の同期WSGI標準に基づいていた。Webアプリケーションは、はるかに遅いコード(データベース、ファイル、ネットワークアクセスなど)に接続することが多いため、ASGIはWSGIベースのアプリケーションのブロッキングやビジーウェイトを回避することができる。
その結果、Starletteとそれを使ったフレームワークは、GoやNode.jsアプリケーション に匹敵する、最速のPythonウェブパッケージとなった。
並行処理の種類
StarletteとFastAPIが提供する非同期サポートの詳細に入る前に、同時実行を実装する複数の方法を知っておくと便利だ。
並列コンピューティングでは、タスクが複数の専用CPUに同時に分散される。 これは、グラフィックスやマシン学習のような「数をこなす」アプリケーションでは一般的だ。
コンカレント・コンピューティングでは、各CPUが複数のタスクを切り替えて実行する。 タスクによっては他のタスクよりも時間がかかるものもあり、合計所要時間を短縮したい。 ファイルの読み取りやリモート・ネットワーク・サービスへのアクセスは、CPUで計算を実行するよりも文字通り数千倍から数百万倍遅い。
Webアプリケーションは、この遅い作業の多くを行う。 どのようにすれば、Webサーバ、あるいはどのようなサーバでも高速に動作させることができるのだろうか? この章では、システム全体から、この章の焦点であるPythonのasync とawait のFastAPIの実装に至るまで、いくつかの可能性について議論する。
分散・並列コンピューティング
もし、、本当に大きなアプリケーション、つまりシングル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