9 webových serverů Python, které můžete vyzkoušet pro svůj další projekt

V tomto přehledu se seznámíme s několika webovými servery pro Python, které vám poslouží k nasazení vašich pythonovských aplikací.

Začneme vysvětlením principu fungování webových serverů a důležitosti rozhraní serverové brány. Následně si projdeme seznam webových serverů pro Python a představíme jejich hlavní charakteristiky. Většinu z nich lze získat jako balíčky PyPI, které snadno nainstalujete a začnete používat ve svých projektech.

Pojďme na to!

Co je to webový server?

Při vývoji pythonovské aplikace typicky využíváte vývojový server k testování. Po dokončení vývoje však nastává čas aplikaci nasadit na produkční server. Mezi různými vrstvami funkcionalit by měl webový server disponovat základní funkcí HTTP serveru.

Pythonový webový server musí být schopen zpracovávat HTTP požadavky (jako jsou GET, PUT a POST) od klientů, například webových prohlížečů, a generovat odpovědi. Tyto odpovědi mohou obsahovat HTTP stavový kód indikující úspěšnost nebo neúspěšnost zpracování požadavku. Může se jednat i o HTML stránky či data v semistrukturovaném formátu, jako je JSON, XML a další.

ASGI vs. WSGI: Rozhraní serverové brány

Představme si, že jste vyvinuli aplikaci v Pythonu pomocí frameworku jako Django nebo Flask. Standardní server nemusí být schopen pochopit a zpracovat požadavky směřované k pythonovské aplikaci. Zde vstupují do hry rozhraní serverové brány.

Tímto rozhraním může být buď Web Server Gateway Interface (WSGI), nebo Asynchronous Server Gateway Interface (ASGI). Webový server přijme požadavek od klienta a následně ho přesměruje do rozhraní serverové brány. Toto rozhraní (WSGI/ASGI) komunikuje s pythonovskou aplikací prostřednictvím volatelného objektu.

Web Server Gateway Interface (WSGI) zpracovává požadavky sekvenčně. Pokud je několik pomalých HTTP požadavků, může to ovlivnit propustnost.

Asynchronous Server Gateway Interface neboli ASGI je nástupcem WSGI a umožňuje asynchronní zpracování požadavků.

Předpokládejme, že aktuálně obsluhovaný požadavek čeká na odpověď od databáze (což může trvat delší dobu). Zatímco první požadavek čeká, ASGI může zpracovat další příchozí požadavek.

To je rozdíl oproti WSGI, kde pro zpracování druhého požadavku musíme nejprve dokončit zpracování toho prvního. Z toho důvodu může použití ASGI vést ke zvýšení propustnosti. ASGI také umožňuje využití asynchronních funkcí Pythonu v aplikaci.

Webové servery pro Python

Nyní si představíme seznam webových serverů, které můžete využít pro vaše aplikace v Pythonu. Zahrnuli jsme i některé frameworky, které nabízejí přímou podporu pro produkční servery. Nejedná se o kompletní výčet a pořadí serverů v seznamu není nijak významné.

Uvicorn

Pokud jste pracovali s vývojem aplikací pomocí FastAPI, narazili jste na Uvicorn, což je implementace webového serveru. Uvicorn je implementací ASGI serveru pro Python.

Chcete-li nainstalovat Uvicorn a související závislosti, spusťte následující příkaz:

$ pip install uvicorn[standard]
# instalace volitelných a Cython-based závislostí

Hlavní vlastnosti Uvicornu:

  • Implementace ASGI
  • Podpora pro spouštění aplikací z asynchronního prostředí Pythonu
  • Nástroj příkazového řádku s rozsáhlou sadou možností
  • Podpora pro spouštění aplikací z továrních funkcí
  • Funkce pro programové ovládání instancí serveru

Gunicorn

Gunicorn je WSGI server pro pythonovské aplikace, který je známý pro své pokročilé funkce správy procesů.

Uvicorn poskytuje pracovní třídu Gunicorn, která vám umožňuje využít výhody výkonu a zároveň řízení procesů. Více informací o nasazení Gunicornu naleznete v dokumentaci.

Pokud máte Python 3.5 nebo novější, nainstalujete Gunicorn pomocí pip:

$ pip install gunicorn

Hlavní charakteristiky Gunicornu:

  • 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ý framework pro Python – stejně jako Django, Flask a FastAPI – ale není zdaleka tak populární. S několika stabilními verzemi CherryPy existuje a vyvíjí se jako plnohodnotný framework již přes deset let. Má také aktivní vývojářskou komunitu.

Zajímavý je i Zen of CherryPy, který zdůrazňuje, že CherryPy je jednoduchý a minimalistický, ale výkonný framework.

CherryPy je pythonovský framework, nikoliv webový server. V našem seznamu je proto, že nativně podporuje produkční server – což většina ostatních frameworků nenabízí.

Pro instalaci CherryPy a zahájení práce spusťte:

$ pip install CherryPy

Hlavní výhody CherryPy:

  • Pythonic framework využívající objektově orientovaný Python; vhodný i pro začátečníky
  • Podpora pro produkční HTTP server, Cheroot
  • Snadnější na naučení než jiné webové frameworky, například Django
  • Podpora pro vytváření a nasazení jednoduchých webových aplikací do mikroslužeb

Daphne

Django je jeden z nejoblíbenějších webových frameworků v Pythonu. Pokud jste vyvíjeli aplikace s Djangem, pravděpodobně jste narazili na webový server Daphne. Daphne je jednou z prvních implementací ASGI serverů, které slouží jako referenční implementace pro ASGI servery.

Daphne je dostupný jako balíček PyPI, který nainstalujete pomocí pip.

$ pip install daphne

Zde je detailní tutoriál, který vás provede tvorbou plně produkční pythonovské aplikace.

Hlavní výhody Daphne:

  • Široce akceptován v produkčním prostředí
  • Referenční implementace pro všechny ASGI servery
  • Podpora pro HTTP, HTTP2 a WebSocket protokoly

Python Trio

Projekt Trio se zaměřuje na poskytování asynchronních I/O schopností pro produkční využití: podporu paralelních I/O a souběžnosti. Součástí projektu je i několik knihoven pro web a HTTP.

Nejnovější verzi Trio (červen 2022) nainstalujete 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
  • starlette: Starlette je odlehčený framework ASGI
  • trio-websocket: Podpora pro server i klienta WebSocket
  • httpx: HTTP klient pro Python

Twisted Web

Twisted je framework pro pythonovské aplikace. Tento event-driven framework obsahuje modul pro webové programování s názvem twisted.web.

Twisted a související moduly nainstalujete pomocí pip:

$ pip install Twisted

Hlavní charakteristiky Twisted:

  • Funkce přívětivé pro vývojáře, například unit testování a statická analýza kódu
  • twisted.web nabízí WSGI server a podporu HTTP klientů a serverů

AIOHTTP

AIOHTTP je pythonovská knihovna, která nabízí funkce na straně klienta i serveru prostřednictvím API klienta a serveru.

Zde je užitečné video, které vysvětluje možnosti asynchronního programování na straně klienta a zrychlení API požadavků.

Hlavní výhody AIOHTTP:

  • Podpora pro funkce HTTP serveru i klienta
  • Podpora logování pro snadnější ladění; logování pro klienta, server, websockety a další
  • Nativní podpora pro testování přes pytest plugin: pytest-aiohttp, který je dostupný jako balíček PyPI

Tornado

Tornado je další webový framework pro Python, který podporuje asynchronní sítě. V posledních letech bylo vydáno mnoho stabilních verzí Tornado – nejnovější verze 6.2 v červenci 2022. Aktuálně Tornado podporuje Python 3.7 a vyšší.

Stejně jako většinu balíčků v tomto seznamu, i Tornado nainstalujete pomocí pip:

$ pip install tornado

Hlavní vlastnosti Tornada:

  • Podpora pro HTTP server tornado.httpserver a klient
  • Škálovatelné a využívá neblokující síťové I/O
  • Vhodné pro aplikace vyžadující dlouhodobá připojení
  • Nástroje pro logování, unit testování a další
  • Bezproblémová integrace se službami pro ověřování

Meinheld

Meinheld je WSGI server pro Python. Využívá a staví na stávajících knihovnách pro zpracování událostí a HTTP požadavků.

Meinheld nainstalujete pomocí pip:

$ pip install meinheld

Některé funkce Meinheldu:

  • Využívá knihovnu http-parser pro zpracování příchozích HTTP požadavků
  • Staví na knihovně picoev pro zpracování událostí

Závěr

Doufáme, že vám tento přehled webových serverů pro Python pomohl. Určitě je vyzkoušejte ve svých budoucích projektech. Představili jsme klíčové funkce; pro plné pochopení závislostí a jejich fungování je potřeba je vyzkoušet v praxi ve vašich aplikacích. 👩🏽‍💻

Pro zlepšení vašich dovedností v Pythonu doporučujeme prozkoumat knihovnu tutoriálů pro Python na etechblog.cz. Příjemné kódování!