次のプロジェクトで試す 9 つの Python Web サーバー
公開: 2022-09-06このリストでは、Python アプリケーションのデプロイに使用できるPython Web サーバーをいくつか紹介します。
まず、Web サーバーの仕組みとサーバー ゲートウェイ インターフェイスの必要性を理解することから始めます。 次に、Python Web サーバーのリストとその主な機能について説明します。 それらのほとんどは、プロジェクトでインストールして使用を開始できる PyPI パッケージとして入手できます。
さぁ、始めよう!
ウェブサーバーとは?
Python アプリケーションを開発するときは、開発サーバーを使用してアプリをテストします。 ただし、開発が完了したら、アプリを運用グレードのサーバーにデプロイする必要があります。 上に追加された機能のいくつかのレイヤーの中で、Web サーバーには HTTP サーバーの基本的な機能が必要です。

Python Web サーバーは、Web ブラウザーなどのクライアントからの HTTP 要求 (GET、PUT、POST などの単純な HTTP 要求) を処理し、応答を返すことができる必要があります。 この応答には、要求が正常に処理されたかどうかを示す HTTP ステータス コードが含まれる場合があります。 HTML Web ページと、JSON、XML などの半構造化データで構成される場合があります。
ASGI と WSGI: サーバー ゲートウェイ インターフェイスの理解
Django や Flask など、任意のフレームワークで Python アプリケーションを開発したとします。 従来のサーバーは、Python アプリケーションに向けられた要求を理解して処理することができない場合があります。 ここで、サーバー ゲートウェイ インターフェイスの出番です。
このゲートウェイ インターフェイスは、Web サーバー ゲートウェイ インターフェイス ( WSGI ) または非同期サーバー ゲートウェイ インターフェイス ( ASGI ) にすることができます。 Web サーバーはクライアントから要求を受信し、それをサーバー ゲートウェイ インターフェイスにリダイレクトします。 インターフェイス (WSGI/ASGI) は、公開された callable を介して Python アプリケーションと対話します。

Web Server Gateway Interface ( WSGI ) は、リクエストを順番に処理します。 低速の HTTP リクエストが複数ある場合、スループットに影響します。
Asynchronous Server Gateway Interface ( ASGI) は WSGI の後継であり、リクエストを非同期的に処理する追加機能を備えています。
現在処理されている要求がデータベースの読み取りを必要とし (長い時間がかかる可能性があります)、応答を待っているとします。 最初の要求が応答を待っているとき、ASGI は 2 番目の受信要求を処理できます。
これは、最初のリクエストを 2 番目のリクエストの前に処理する必要がある WSGI とは対照的です。 したがって、ASGI を使用すると、スループットが向上する場合があります。 ASGI を使用すると、アプリケーション内で非同期の Python 機能を使用することもできます。
Python Web サーバー
それでは、Python アプリケーションに使用できる Web サーバーをリストアップしましょう。 また、すぐに使用できる運用対応サーバーのサポートを提供する特定のフレームワークも含まれています。 これは完全なリストではなく、以下の Web サーバーの推奨事項は特定の順序ではありません。
ウビコーン
FastAPI を使用したアプリケーション開発に精通している場合は、Web サーバーの実装である Uvicorn に出くわしたことがあるでしょう。 Uvicorn は、Python 用の ASGI サーバー実装です。

pip
を使用して Uvicorn と関連する依存関係をインストールするには、次のコマンドを実行します。
$ pip install uvicorn[standard] # includes installation of optional and Cython-based dependencies
Uvicorn の主な機能は次のとおりです。
- ASGI の実装
- 非同期 Python 環境からのアプリ実行のサポート
- オプションの広範なリストを備えたコマンドラインツール
- ファクトリ関数からのアプリケーションの実行をサポート
- サーバー インスタンスをプログラムで制御する機能を提供します。
ギニコーン
Gunicorn は Python アプリケーション用の WSGI サーバーであり、高度なプロセス管理機能でよく知られています。

Uvicorn は Gunicorn ワーカー クラスを提供し、パフォーマンスとプロセス管理の利点を同時に達成できるようにします。 このドキュメント ページには、Gunicorn のデプロイに関する詳細が含まれています。
Python 3.5 以降を使用している場合は、pip を使用して Gunicorn をインストールできます。
$ pip install gunicorn
以下は、Gunicorn の顕著な特徴です。
- シンプルで高速
- 多くの Web フレームワークと互換性があります
- HTTP プロキシ サーバーでの使用のサポート
- 高度なプロセス管理
チェリーパイ
CherryPy は、Django、Flask、FastAPI と同様に Python Web フレームワークですが、これらのフレームワークほど普及していません。 いくつかの安定したリリースで、CherryPy は存在し、10 年以上にわたって本格的なフレームワークに進化してきました。 また、支援的な開発者コミュニティもあります。

興味深い Zen of CherryPy をご覧ください。CherryPy がシンプルでミニマリストでありながら強力なフレームワークであるという本質が伝わってきます。
CherryPy は Python フレームワークであり、Web サーバーではありませんが、他のほとんどのフレームワークとは異なり、運用グレードのサーバーをネイティブにサポートしているため、リストに含まれています。
CherryPy をインストールして開始するには、次のコマンドを実行します。
$ pip install CherryPy
以下は、CherryPy の主な機能です。
- オブジェクト指向の Python を使用した Pythonic フレームワーク。 初心者に最適
- 本番対応の HTTP サーバー、Cheroot のサポート
- Django などの他の Web フレームワークよりも習得が容易
- シンプルな Web アプリのビルドとマイクロサービスへのデプロイのサポート
ダフネ
Django は、最も人気のある Python Web フレームワークの 1 つです。 Django でアプリケーションを開発したことがある場合は、おそらく Daphne Web サーバーを使用したことがあるでしょう。 Daphne は、ASGI サーバー実装のリファレンスとして使用された最初の ASGI サーバー実装の 1 つです。

Daphne は、pip を使用してインストールできる PyPI パッケージとして入手できます。
$ pip install daphne
これは、フルスタックの本番環境対応の Python アプリケーションを構築する手順を説明する詳細なチュートリアルです。
Daphne の主な機能は次のとおりです。
- 本番環境で広く採用
- すべての ASGI サーバー実装のリファレンス
- HTTP、HTTP2、および WebSocket プロトコルのサポート
パイソン・トリオ
Trio プロジェクトは、プロダクション グレードの非同期 I/O 機能 (並列 I/O と同時実行のサポート) を提供することを目的としています。 このプロジェクトには、いくつかの Web および HTTP Python ライブラリもあります。

PyPI から Trio の最新リリース (2022 年 6 月) をインストールできます。
$ pip install trio
Python を使用した Web プログラミングに役立つ Trio ライブラリのリストを次に示します。
-
hypercorn
: Hypercorn は、HTTP をサポートする ASGI サーバーです。 -
muffin
: Muffin は Python 用の ASGI Web フレームワークです。 -
startlette
: Starlette は軽量の ASGI フレームワークです trio-websocket
: WebSocket サーバーとクライアントのサポートhttpx
: Python の HTTP クライアント
ねじれたウェブ
Twisted は Python アプリケーションのフレームワークです。 このイベント駆動型フレームワークには、 twisted.web
と呼ばれる Web プログラミング用のモジュールが含まれています。
pip を使用して Twisted と関連モジュールをインストールできます。
$ pip install Twisted
Twisted の主な機能は次のとおりです。
- 単体テストや静的コード チェックなどの開発者向け機能
twisted.web
は WSGI サーバーを提供し、HTTP クライアントとサーバーをサポートします。
AIOHTTP
AIOHTTP は、クライアント API とサーバー API を介してクライアント側とサーバー側の機能を提供する Python ライブラリです。
これは、API へのリクエストを大幅に高速化するクライアント側の非同期プログラミング機能を説明する便利なビデオです。
AIOHTTP の主な機能は次のとおりです。
- HTTP サーバーとクライアント機能の両方のサポート
- デバッグを容易にするロギングのサポート。 クライアント、サーバー、Web ソケットなどのログを提供します
- テスト用の pytest プラグインによるテストのネイティブ サポート: pytest-aiohttp (PyPI パッケージとして利用可能)
竜巻
Tornado は、非同期ネットワークをサポートするもう 1 つの Python Web フレームワークです。 近年、Tornado には多くの安定版がリリースされています。最新のバージョン 6.2 は 2022 年 7 月にリリースされました。現在、Tornado は Python 3.7 以降をサポートしています。

このリストのほとんどのパッケージと同様に、Tornado もpip
を使用してインストールできます。
$ pip install tornado
Tornado の主な機能は次のとおりです。
- HTTP サーバー
tornado.httpserver
および client のサポート - スケーラブルでノンブロッキング ネットワーク I/O を使用
- かなり長い時間間隔で接続を必要とするアプリケーションに最適
- ロギング、単体テストなどのユーティリティ
- 認証のためのサービスとのシームレスな統合
メインヘルド
Meinheld は、Python 用の WSGI サーバーです。 イベント処理と HTTP 要求処理のために既存のライブラリを使用して構築します。
pip を使用して Meinheld をインストールできます。
$ pip install meinheld
メインヘルドのいくつかの機能:
-
http-parser
ライブラリを使用して受信 HTTP リクエストを処理します - イベント処理のために
picoev
ライブラリーの上に構築
結論
この Python Web サーバーのリストがお役に立てば幸いです。 今後のプロジェクトでそれらを試してみてください。 主な機能をリストしました。 依存関係とそれらがどのように機能するかを完全に理解するには、それらをアプリケーションで使用する必要があります。
Python のスキルをレベルアップしたい場合は、Geekflare の Python チュートリアルのライブラリをチェックすることを検討してください。 ハッピーコーディング!