9 個 Python Web 服務器可供您下一個項目嘗試

已發表: 2022-09-06

在這篇文章中,我們展示了幾個Python Web 服務器,您可以使用它們來部署 Python 應用程序。

我們將從了解 Web 服務器的工作原理以及對服務器網關接口的需求開始。 然後,我們將瀏覽 Python Web 服務器的列表以及它們的顯著特性。 它們中的大多數都以 PyPI 包的形式提供,您可以在項目中安裝並開始使用它們。

讓我們開始!

什麼是 Web 服務器?

在開發 Python 應用程序時,您將使用開發服務器來測試您的應用程序。 但是,一旦開發完成,您就必須在生產級服務器上部署您的應用程序。 在頂部的幾層附加功能中,Web 服務器應該具有 HTTP 服務器的基本功能。

蟒蛇網絡服務器

Python Web 服務器應該能夠處理來自客戶端(例如 Web 瀏覽器)的 HTTP 請求(簡單的 HTTP 請求,如 GET、PUT 和 POST),並返迴響應。 此響應可能包含指示請求是否成功處理的 HTTP 狀態代碼。 它可能包含 HTML 網頁和半結構化數據,例如 JSON、XML 等。

ASGI 與 WSGI:了解服務器網關接口

假設您已經在您選擇的框架中開發了一個 Python 應用程序,例如 Django 或 Flask。 傳統服務器可能無法理解和處理定向到 Python 應用程序的請求。 這是服務器網關接口發揮作用的地方。

此網關接口可以是 Web 服務器網關接口 ( WSGI ) 或異步服務器網關接口 ( ASGI )。 Web 服務器接收來自客戶端的請求,然後將其重定向到服務器網關接口。 接口 (WSGI/ASGI) 通過公開的可調用對象與 Python 應用程序交互。

python-web-server-asgi-wsgi

Web 服務器網關接口 ( WSGI ) 按順序處理請求。 如果有多個慢速 HTTP 請求,那麼它們會影響吞吐量。

異步服務器網關接口或ASGI是 WSGI 的繼承者,並且具有異步處理請求的額外能力。

假設當前服務的請求需要數據庫讀取(可能需要很長時間)並且正在等待響應。 當第一個請求正在等待響應時,ASGI 可以處理第二個傳入請求。

這與 WSGI 不同,後者必須在第二個請求之前處理第一個請求。 因此,使用 ASGI 可能會導致吞吐量增加。 ASGI 還允許您在應用程序中使用異步 Python 功能。

Python Web 服務器

現在,讓我們列出可用於 Python 應用程序的 Web 服務器。 我們還包括某些框架,為生產就緒的服務器提供開箱即用的支持。 這不是一個詳盡的列表,下面的 Web 服務器建議沒有任何特定的順序。

優維康

如果您熟悉使用 FastAPI 進行應用程序開發,您就會遇到 Uvicorn,這是一個 Web 服務器實現。 Uvicorn 是 Python 的 ASGI 服務器實現。

python-web-server-uvicorn

要使用pip安裝 Uvicorn 和相關依賴項,請運行以下命令:

 $ pip install uvicorn[standard] # includes installation of optional and Cython-based dependencies

以下是 Uvicorn 的顯著特點:

  • ASGI 實現
  • 支持從異步 Python 環境運行應用程序
  • 具有廣泛選項列表的命令行工具
  • 支持從工廠功能運行應用程序
  • 提供以編程方式控制服務器實例的功能

獨角獸

Gunicorn 是一個用於 Python 應用程序的 WSGI 服務器,以其先進的進程管理功能而聞名。

gunicorn-python-網絡服務器

Uvicorn 提供了 Gunicorn 工人類,讓您同時獲得性能和流程管理優勢。 此文檔頁麵包含有關部署 Gunicorn 的詳細信息。

如果你有 Python 3.5 及更高版本,你可以使用 pip 安裝 Gunicorn:

 $ pip install gunicorn

以下是 Gunicorn 的顯著特點:

  • 簡單快速
  • 與許多 Web 框架兼容
  • 支持與 HTTP 代理服務器一起使用
  • 先進的流程管理

櫻桃派

CherryPy 是一個 Python Web 框架——就像 Django、Flask 和 FastAPI 一樣——但不如這些框架流行。 CherryPy 已經有了幾個穩定的版本,並且已經發展成為一個成熟的框架十多年了。 它還有一個支持性的開發者社區。

櫻桃小丸子

您可以查看有趣的 CherryPy Zen,它傳達了 CherryPy 是一個簡單、極簡但功能強大的框架的精髓。

CherryPy 是一個 Python 框架而不是 Web 服務器,但它在我們的列表中,因為它與大多數其他框架不同,它原生支持生產級服務器。

要安裝 CherryPy 並開始使用,請運行:

 $ pip install CherryPy

以下是 CherryPy 的顯著特點:

  • 使用面向對象 Python 的 Pythonic 框架; 非常適合初學者
  • 支持生產就緒的 HTTP 服務器 Cheroot
  • 比其他 Web 框架(例如 Django)更容易學習
  • 支持構建簡單的 Web 應用程序並將其部署到微服務

Django 是最流行的 Python Web 框架之一。 如果您使用 Django 開發過應用程序,那麼您可能會使用 Daphne Web 服務器。 Daphne 是最早用作 ASGI 服務器實現參考的 ASGI 服務器實現之一。

Daphne 以 PyPI 包的形式提供,您可以使用 pip 進行安裝。

 $ pip install daphne

這是一個詳細的教程,將引導您構建一個全棧生產就緒的 Python 應用程序。

以下是達芙妮的顯著特點:

  • 廣泛應用於生產環境
  • 所有 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 是一個 Python 庫,它通過客戶端和服務器 API 提供客戶端和服務器端功能。

這是一個有用的視頻,解釋了客戶端的異步編程功能,以顯著加快對 API 的請求。

以下是 AIOHTTP 的顯著特點:

  • 支持 HTTP 服務器和客戶端功能
  • 支持日誌記錄,方便調試; 為客戶端、服務器、Web 套接字等提供日誌記錄
  • 原生支持通過 pytest 測試插件進行測試:pytest-aiohttp,可作為 PyPI 包使用

龍捲風

Tornado 是另一個支持異步網絡的 Python Web 框架。 近年來,Tornado 出現了很多穩定版本,最新的 6.2 版本於 2022 年 7 月發布。目前,Tornado 支持 Python 3.7 及更高版本。

與此列表中的大多數軟件包一樣,Tornado 也可以使用pip安裝:

 $ pip install tornado

以下是 Tornado 的顯著特點:

  • 支持 HTTP 服務器tornado.httpserver和客戶端
  • 可擴展並使用非阻塞網絡 I/O
  • 非常適合需要長時間連接的應用程序
  • 用於日誌記錄、單元測試等的實用程序
  • 與身份驗證服務無縫集成

邁海德

Meinheld 是 Python 的 WSGI 服務器。 它使用並構建用於事件處理和 HTTP 請求處理的現有庫。

您可以使用 pip 安裝 Meinheld:

 $ pip install meinheld

Meinheld 的一些特點:

  • 使用http-parser庫處理傳入的 HTTP 請求
  • 構建在picoev庫之上以進行事件處理

結論

我希望您發現這篇 Python Web 服務器列表對您有所幫助。 一定要在你未來的項目中嘗試一下。 我們列出了主要功能; 要完全了解依賴關係及其工作方式,您必須在應用程序中使用它們。

如果您想提高您的 Python 技能,請考慮查看 Geekflare 的 Python 教程庫。 快樂編碼!