Top 5 asynchrónnych webových rámcov pre Python

Asynchrónne programovanie je v Pythone teraz občanom prvej triedy. Ak ste webový vývojár, môžete si vybrať z úžasných rámcov!


V čase písania nie je asynchrónna komunita Python už len bzučiakom. S vydaním jeho asyncio Knižnica vo verzii 3.5, Python potvrdil vplyv Node.js na vývoj webových aplikácií a do jazyka uviedol dve nové kľúčové slová – async a čakajú. To bol veľmi veľký problém, pretože jazyk Python je mimoriadne opatrný pri rozširovaní základnej syntaxe, pokiaľ to nie je naliehavo potrebné, čo naznačuje len to, ako zásadne dôležité vývojári jazyka Python považovali asynchrónne schopnosti..

V dôsledku toho boli otvorené záplavy asynchrónneho programovania: nové a staré knižnice začali využívať funkciu coroutines, asynchrónne rámce explodovali v popularite a stále sa píšu nové. Výkon na rovnakej alebo lepšej úrovni ako u Node.js nie je neslýchaný a pokiaľ vaše vzorce načítania nezahŕňajú veľa úloh náročných na procesor, nie je dôvod, prečo nemôžete urobiť niekoľko tisíc žiadostí za sekundu..

Ale dosť motivácie!

Pozrime sa na súčasnú krajinu Pythonu a pozrite sa na niektoré z najlepších asynchrónnych rámcov.

tornádo

prekvapivo, tornádo nie je vôbec nový rámec. Jeho prvé vydanie bolo v roku 2009 (presne pred desiatimi rokmi, v čase písania textu) a od tej doby sa zameriava na poskytovanie vysoko spoľahlivého asynchrónneho programovania s vysokou súbežnosťou..

Tornado v podstate nie je webový rámec. Je to zbierka asynchrónnych modulov, ktoré sa používajú aj na zostavenie modulu webového rámca. Konkrétnejšie ide o tieto moduly:

  • Coroutines a iné primitívy (tornado.gen, tornado.locks, tornado.queues, atď.)
  • Sieťové moduly (tornado.ioloop, tornado.iostream, atď.)
  • Asynchrónne servery a klienti (tornado.httpserver, tornado.httpclient atď.)

Tieto boli kombinované na výrobu konečných modulov rámca: tornado.web, tornado.routing, tornado.template atď..

importovať tornado.ioloop
import tornado.web

trieda MainHandler (tornado.web.RequestHandler):
def get (self):
self.write ("Ahoj, svet")

def make_app ():
return tornado.web.Aplikácia ([
(r"/", MainHandler),
])

ak __name__ == "__Hlavná__":
app = make_app ()
app.listen (8888)
tornado.ioloop.IOLoop.current (). start ()

Tornado má silné a odhodlané nasledovanie v komunite Python a skúsení architekti ho používajú na vytváranie vysoko schopných systémov. Je to rámec, ktorý už dlho odpovedal na problémy súbežnosti, ale možno sa nestal hlavným prúdom, pretože nepodporuje štandard WSGI a bol príliš súčasťou buy-inu (pamätajte, že väčšina knižníc Python je stále synchrónna). ).

sanice

sanice je „moderný“ rámec v pravom slova zmysle: nepodporuje Python verziu nižšiu ako 3.6, podporuje jednoduchú a univerzálnu asynchrónnu / čakajúcu syntax z krabice, a preto vás núti čítať načítania dokumentácie a majte na pamäti okrajové prípady skôr, ako budete môcť napísať svoj prvý obslužný program HTTP.

Výsledná syntax je preto celkom príjemná (prinajmenšom podľa môjho názoru); podobá sa kódu, ktorý by ste napísali s akýmkoľvek iným mikrorámcom (napr. Flask, CherryPy), do ktorého bolo vložených iba niekoľko async:

zo sanic import Sanic
z importu sanic.response json

app = Sanic ()

@ App.route ("/")
async def test (žiadosť):
return json ({"Ahoj": "svet"})

ak __name__ == "__Hlavná__":
app.run (host ="0.0.0.0", port = 8000)

Sanic je pravdepodobne najobľúbenejší a najobľúbenejší asynchrónny rámec vo svete Python. Má takmer všetky funkcie, ktoré chcete pre svoje projekty – smerovanie, middleware, súbory cookie, verzovanie, plány, zobrazenia založené na triede, statické súbory, streaming, zásuvky a pod. – a to, čo neponúka z krabice – templating, podpora databázy, vstupno-výstupné súbory, fronty – je možné ich pridať, pretože pre tieto sú k dispozícii dostatočné množstvo asynchrónnych knižníc od dnešného dňa.

Výbor

Výbor je blízky bratranec Sanicu, okrem toho, že je zameraný na to, aby sa stal najrýchlejším webovým serverom Python. V skutočnosti vás prvá návšteva tejto webovej stránky pozdraví rámcovým porovnaním:

Ako vidíte, spoločnosť Vibora tvrdí, že je niekoľkokrát rýchlejšia ako klasické rámce a je dvakrát rýchlejšie ako Sanic, jej najbližší konkurent. Referenčné hodnoty sa samozrejme berú so zrnkom soli. ��

Aj keď v syntaxi a funkciách je Vibora porovnateľná so Sanic (alebo možno dokonca o niečo lepšia, pretože zväzky populárnych knižníc a vecí, ako je templating, sú k dispozícii po vybalení), považoval by som Sanicu za vyspelejšiu, pretože už existuje dlhšie väčšia komunita.

z importu vibrácií Vibora, JsonResponse

app = Vibora ()

@ App.route ( ‘/’)
async def doma ():
návrat JsonResponse ({‘ahoj’: ‘svet’})

ak __name__ == ‘__main__’:
app.run (host ="0.0.0.0", port = 8000)

Ak ste výkonný narkoman, Vibora by mohla vznášať vašu loď. To znamená, že v čase písania Vibora prechádza úplným prepísaním, aby sa stal ešte rýchlejším odkaz vo svojej výkonovej verzii hovorí, že je pod „ťažkým vývojom“. Bude to sklamanie pre tých, ktorí vyzdvihli Viboru skôr a čoskoro musia čeliť prelomovým zmenám, ale hej, sú to prvé dni v asynchrónnom svete Pythonu a nikto neočakáva, že bude stabilný.

Kvart

Ak máte radi vývoj v banke, ale máte nedostatok asynchrónnej podpory, budete sa tešiť Kvart veľa.

Quart je v súlade s ASGI štandard, ktorý je nástupcom slávneho štandardu WSGI a ponúka asynchrónnu podporu. Zaujímavé na Quart je to, že je to nielen podobné banke, ale v skutočnosti je v súlade s rozhraním API banky! Autor tohto rámca chcel zachovať dojem banky a pridať k nemu async, WebSockets a HTTP 2. Výsledkom je, že sa môžete Quart naučiť priamo z dokumentácie banky, nezabudnite však, že funkcie v Quart sú asynchrónne..

z kvartového importu

app = Quart (__ name__)

@ App.route ( ‘/’)
async def hello ():
návrat ‘ahoj’

app.run ()

Cíti sa (takmer) presne ako Flask, nie je to tak?!

Pretože Quart je vývojom banky, sú k dispozícii všetky funkcie nachádzajúce sa v banke: smerovanie, middleware, relácie, šablóny, plány atď. V skutočnosti môžete dokonca použiť rozšírenie banky priamo v aplikácii Quart. Jedným úlovkom je, že program Python 3.7+ je podporovaný, ale ak nepoužívate najnovšiu verziu programu Python, možno async nie je tou správnou cestou. ��

Dokumentácia je skutočne potrebná, ak nemáte skúsenosti s Flaskom, ale môžem odporučiť Quart, pretože je to pravdepodobne jediný async rámec, ktorý sa čoskoro blíži k vydaniu 1.0..

Fastape

Posledný (ale najpôsobivejší) rámec v tomto zozname je Fastape. Nie, nejde iba o rámec API; v skutočnosti sa FastAPI javí ako rámec s najbohatšími funkciami a dokumentáciou, s ktorým som sa stretol pri výskume asynchrónnych rámcov Python.

Je zaujímavé poznamenať, že autor rámca podrobne preštudoval niekoľko ďalších rámcov, od súčasných ako Django po moderné ako Sanic, a pozrel technológie naprieč NestJS (webový rámec Node.js, strojopis). Ich vývojovú filozofiu a rozsiahle porovnania je možné prečítať tu.

Syntax je celkom príjemná; dá sa dokonca tvrdiť, že je oveľa príjemnejšia ako iné rámce, s ktorými sme sa stretli:

rom fastapi import FastAPI

app = FastAPI ()

@ App.get ("/ Users / mne")
async def read_user_me ():
návrat {"ID používateľa": "aktuálny používateľ"}

@ App.get ("/ Užívatelia / {USER_ID}")
async def read_user (user_id: str):
návrat {"ID používateľa": ID používateľa}

A teraz zoznam zabijáckych funkcií, ktoré spôsobujú, že FastAPI zatieňuje ďalšie rámce:

Automatické generovanie dokumentov API: Akonáhle sú vaše koncové body napísané, môžete si zahrať s API pomocou UI kompatibilného s normami. Podporované sú SwaggerUI, ReDoc a ďalšie.

Rámec tiež robí automatickú dokumentáciu dátového modelu s JSON Schema.

Moderný vývoj: Áno, slovo „moderný“ sa vrhá do značnej miery, ale zistil som, že FastAPI vlastne chodí po svojom rozhovore. Závislosť Vstrekovanie a označovanie typu sú prvotriednymi občanmi, ktorí presadzujú nielen dobré zásady kódovania, ale dlhodobo zabraňujú chybám a zmätkom..

Rozsiahla dokumentácia: Neviem o tebe, ale som celkom hlúpy pre dobrú dokumentáciu. A v tejto oblasti FastAPI vyhráva nadol. Má stránky na stránkach dokumentov vysvetľujúce takmer každú malú jemnosť a „pozor!“ momenty pre vývojárov všetkých úrovní. V dokumentoch tu cítim jasné „srdce a dušu“ a jediné porovnanie, ktoré môžem nájsť, je dokumentácia Django (áno, dokumenty FastAPI sú také dobré!).

Za základmi: FastAPI má podporu pre WebSockets, Streaming a GraphQL okrem toho, že má všetkých tradičných pomocníkov, ako sú CORS, relácie, súbory cookie atď..

A čo predstavenie? FastAPI je postavený na úžasnej knižnici Starlette, čo vedie k výkonu, ktorý sa zhoduje s Node, av niektorých prípadoch dokonca s Go! Celkovo mám skutočne pocit, že FastAPI bude závodiť ako najlepší asynchrónny rámec pre Python..

záver

V súčasnosti sa v asynchrickom prostredí Pythonu veľa deje. Objavujú sa nové rámce, starí sa prepisujú a vyvíjajú sa knižnice, ktoré zodpovedajú asynchrónnemu správaniu. Aj keď má Python vstavanú podporu pre slučku udalostí a je možné, aby boli časti vašej aplikácie asynchrónne, môžete sa rozhodnúť ísť all-in a stavať na jednom z rámcov tu. Nezabudnite mať na pamäti dlhodobé hľadisko: niekoľko asynchrónnych rámcov Python sa nachádza v raných štádiách a rýchlo sa vyvíjajú, čo poškodí váš vývojový proces a zvýši obchodné náklady. Opatrnosť je kľúčová!

Ale všetci povedali a urobili; Python je pripravený na výrobu, aby poskytoval výkon blesku, pokiaľ ide o webové rámce. Ak už dlho uvažujete o migrácii do Node, nemusíte! ��

To znie dobre? Majster Python dnes!

Tagy:

  • krajta

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map