9 webových serverů Python, které můžete vyzkoušet pro svůj další projekt
V tomto seznamu představujeme několik webových serverů Python, které můžete použít k nasazení svých aplikací Python.
Začneme pochopením toho, jak fungují webové servery a potřebou rozhraní serverové brány. Poté si projdeme seznam webových serverů Python spolu s jejich hlavními funkcemi. Většina z nich je k dispozici jako balíčky PyPI, které si můžete nainstalovat a začít používat ve svých projektech.
Pojďme začít!
Table of Contents
Co je webový server?
Při vývoji aplikace Python použijete vývojový server k testování aplikace. Po dokončení vývoje však budete muset aplikaci nasadit na produkční server. Mezi několika vrstvami přidané funkčnosti by měl mít webový server základní funkčnost HTTP serveru.
Webový server Pythonu by měl být schopen zpracovat požadavky HTTP (jednoduché požadavky HTTP jako GET, PUT a POST) od klientů, jako jsou webové prohlížeče, a vrátit odpověď. Tato odpověď může obsahovat stavový kód HTTP označující, zda byl požadavek zpracován úspěšně nebo ne. Může se skládat z webových stránek HTML a polostrukturovaných dat, jako jsou JSON, XML a další.
ASGI vs. WSGI: Pochopení rozhraní serverové brány
Předpokládejme, že jste vyvinuli aplikaci Python v rámci vašeho výběru, řekněme Django nebo Flask. Konvenční server nemusí být schopen porozumět a zpracovat požadavky směřované do aplikace Python. Zde vstupují do hry rozhraní brány serveru.
Tímto rozhraním brány může být rozhraní brány webového serveru (WSGI) nebo rozhraní ASGI (Asynchronous Server Gateway Interface). Webový server obdrží požadavek od klienta, který poté přesměruje na rozhraní brány serveru. Rozhraní (WSGI/ASGI) interaguje s aplikací Python prostřednictvím otevřeného callable.
Web Server Gateway Interface (WSGI) zpracovává požadavky postupně. Pokud existuje více pomalých požadavků HTTP, ovlivní propustnost.
Asynchronous Server Gateway Interface neboli ASGI je nástupcem WSGI a má další schopnost zpracovávat požadavky asynchronně.
Předpokládejme, že aktuálně obsluhovaný požadavek vyžaduje čtení databáze (to může potenciálně trvat dlouho) a čeká na odpověď. Když první požadavek čeká na odpověď, ASGI může zpracovat druhý příchozí požadavek.
To je na rozdíl od WSGI, kde první požadavek musí být zpracován pro druhý požadavek. Proto použití ASGI může vést ke zvýšení propustnosti. ASGI vám také umožňuje používat asynchronní funkce Pythonu ve vaší aplikaci.
Webové servery Python
Nyní uveďte seznam webových serverů, které můžete použít pro své aplikace Python. Zahrnuli jsme také určité rámce, které poskytují přímou podporu pro servery připravené na provoz. Toto není vyčerpávající seznam a níže uvedená doporučení pro webový server nejsou v žádném konkrétním pořadí.
Uvicorn
Pokud jste obeznámeni s vývojem aplikací pomocí FastAPI, narazili jste na Uvicorn, implementaci webového serveru. Uvicorn je implementace serveru ASGI pro Python.
Chcete-li nainstalovat Uvicorn a související závislosti pomocí pip, spusťte následující příkaz:
$ pip install uvicorn[standard] # includes installation of optional and Cython-based dependencies
Následují hlavní rysy Uvicornu:
- Implementace ASGI
- Podpora pro spouštění aplikací z asynchronního prostředí Pythonu
- Nástroj příkazového řádku s rozsáhlým seznamem možností
- Podporuje spouštění aplikací z továrních funkcí
- Poskytuje funkce pro programové řízení instancí serveru
Gunicorn
Gunicorn je WSGI server pro Python aplikace, dobře známý pro své pokročilé funkce pro správu procesů.
Uvicorn poskytuje pracovní třídu Gunicorn, která vám umožňuje dosáhnout výhod výkonu a řízení procesů současně. Tato stránka dokumentace obsahuje podrobnosti o nasazení Gunicornu.
Pokud máte Python 3.5 a novější, můžete Gunicorn nainstalovat pomocí pip:
$ pip install gunicorn
Následují hlavní rysy Gunicorna:
- Jednoduché a rychlé
- Kompatibilní s mnoha webovými frameworky
- Podpora pro použití s HTTP proxy serverem
- Pokročilé řízení procesů
CherryPy
CherryPy je webový rámec Pythonu – stejně jako Django, Flask a FastAPI – ale není tak populární jako tyto rámce. S několika stabilními verzemi existuje CherryPy a vyvinulo se v plnohodnotný rámec již více než deset let. Má také podpůrnou vývojářskou komunitu.
Můžete se podívat na zajímavý Zen of CherryPy, který vyjadřuje podstatu, že CherryPy je jednoduchý a minimalistický, ale výkonný framework.
CherryPy je framework Python a ne webový server, ale je na našem seznamu, protože nativně podporuje server produkční úrovně – na rozdíl od většiny ostatních frameworků.
Chcete-li nainstalovat CherryPy a začít, spusťte:
$ pip install CherryPy
Následují hlavní rysy CherryPy:
- Pythonic framework využívající objektově orientovaný Python; dobře se hodí pro začátečníky
- Podpora pro produkční server HTTP, Cheroot
- Snadněji se učí než jiné webové rámce, jako je Django
- Podpora pro vytváření a nasazení jednoduchých webových aplikací do mikroslužeb
Daphne
Django je jedním z nejpopulárnějších webových frameworků Pythonu. Pokud jste vyvíjeli aplikace pomocí Django, pravděpodobně jste použili webový server Daphne. Daphne je jednou z prvních implementací ASGI serverů používaných jako reference pro implementace ASGI serverů.
Daphne je k dispozici jako balíček PyPI, který můžete nainstalovat pomocí pip.
$ pip install daphne
Zde je podrobný tutoriál, který vás provede vytvořením plné produkční aplikace Python.
Následují hlavní rysy Daphne:
- Široce přijato v produkčním prostředí
- Reference pro všechny implementace serveru ASGI
- Podpora protokolů HTTP, HTTP2 a WebSocket
Python Trio
Projekt Trio si klade za cíl poskytovat asynchronní I/O schopnosti na produkční úrovni: podporu paralelních I/O a souběžnosti. Tento projekt má také několik webových a HTTP Python knihoven.
Nejnovější verzi Trio (červen 2022) si můžete nainstalovat z PyPI.
$ pip install trio
Zde je seznam užitečných knihoven Trio pro webové programování v Pythonu:
- hypercorn: Hypercorn je ASGI server, který podporuje HTTP
- muffin: Muffin je webový framework ASGI pro Python
- startlette: Starlette je lehký framework ASGI
- trio-websocket: podpora serveru a klienta WebSocket
- httpx: HTTP klient pro Python
Twisted Web
Twisted je framework pro Python aplikace. Tento rámec řízený událostmi obsahuje modul pro programování webu s názvem twisted.web.
Twisted a související moduly můžete nainstalovat pomocí pip:
$ pip install Twisted
Následují hlavní rysy Twisted:
- Funkce přívětivé pro vývojáře, jako je testování jednotek a kontrola statického kódu
- twisted.web poskytuje server WSGI a podporu pro HTTP klienty a servery
AIOHTTP
AIOHTTP je knihovna Pythonu, která poskytuje funkce na straně klienta a serveru prostřednictvím rozhraní API klienta a serveru.
Zde je užitečné video vysvětlující možnosti asynchronního programování na straně klienta, které výrazně urychlí požadavky na rozhraní API.
Následují hlavní rysy AIOHTTP:
- Podpora funkce HTTP serveru i klienta
- Podpora protokolování pro snadnější ladění; poskytuje protokolování pro klienta, server, webové sokety a další
- Nativní podpora pro testování prostřednictvím pytest Plugin pro testování: pytest-aiohttp, který je k dispozici jako balíček PyPI
Tornádo
Tornado je další webový rámec Pythonu, který podporuje asynchronní sítě. V posledních letech bylo vydáno mnoho stabilních verzí Tornado – nejnovější verze 6.2 byla vydána v červenci 2022. V současné době Tornado podporuje Python 3.7 a novější.
Stejně jako většinu balíčků v tomto seznamu lze Tornado nainstalovat také pomocí pip:
$ pip install tornado
Následují hlavní rysy Tornado:
- Podpora pro HTTP server tornado.httpsserver a klient
- Škálovatelný a používá neblokující síťové I/O
- Dobře se hodí pro aplikace, které vyžadují připojení po podstatně delší časový interval
- Nástroje pro protokolování, testování jednotek a další
- Bezproblémová integrace se službami pro ověřování
Meinheld
Meinheld je WSGI server pro Python. Využívá a buduje existující knihovny pro zpracování událostí a zpracování požadavků HTTP.
Meinheld můžete nainstalovat pomocí pip:
$ pip install meinheld
Některé funkce Meinheldu:
- Používá knihovnu http-parser ke zpracování příchozích požadavků HTTP
- Staví na knihovně picoev pro zpracování událostí
Závěr
Doufám, že vám tento seznam webových serverů Python pomohl. Určitě je vyzkoušejte ve svých budoucích projektech. Uvedli jsme klíčové funkce; abyste plně porozuměli závislostem a tomu, jak fungují, budete je muset používat ve svých aplikacích. 👩🏽💻
Chcete-li zlepšit své dovednosti Python, zvažte prozkoumání knihovny výukových programů Pythonu ve etechblog.cz. Šťastné kódování!