Top 5 asinkronih web okvira za Python

Asinhrono programiranje je u Pythonu prvorazredan građanin. Ako ste web programer, možete izabrati zadivljujuće okvire!


Što se tiče pisanja, asinhronost nije više samo zbunjujuća riječ u Python zajednici. Puštanjem svog asyncio knjižnica u 3.5 inačici, Python je prepoznao utjecaj Node.js na web razvoj i uveo dvije nove ključne riječi u jezik – asinkciju i čekanje. Ovo je bila jako velika stvar jer je Python jezik izuzetno oprezan širenju sintakse jezgre, osim ako postoji hitna potreba, što samo ukazuje na to koliko su Python-ovi programeri temeljno smatrali asinhronim mogućnostima.

Kao rezultat toga, otvoreni su otvori asinhronog programiranja: nove i stare biblioteke počele su koristiti značajku coroutine, asinhroni okviri su eksplodirali na popularnosti, a novi se i danas pišu. Učinkovitost jednaka ili bolja od Node.js nije nečuvena, i ako vaši obrasci za učitavanje ne uključuju puno CPU-ovih zadataka, nema razloga zašto ne možete napraviti nekoliko tisuća zahtjeva u sekundi.

Ali dovoljno motivacije!

Ispitajmo trenutni Python krajolik i provjerimo neke od najboljih asinhronih okvira.

Tornado

Iznenađujuče, Tornado uopće nije novi okvir. Prvotno izdanje bilo je 2009. (prije točno deset godina, kako je napisano) i od tada se fokusirao na pružanje stabilnog asinkronog programiranja s velikom konkurentnošću.

Tornado nije web okvir u osnovi. To je zbirka asinkronih modula koji se također koriste za izgradnju modula web okvira. Konkretnije, ovi moduli su:

  • Coroutine i ostali primitivi (tornado.gen, tornado.locks, tornado.queues, itd.)
  • Mrežni moduli (tornado.ioloop, tornado.iostream itd.)
  • Asinhroni serveri i klijenti (tornado.httpserver, tornado.httpclient itd.)

Oni su kombinirani za proizvodnju konačnih okvirnih modula: tornado.web, tornado.routing, tornado.template itd..

uvoz tornado.ioloop
uvoz tornado.web

klasa MainHandler (tornado.web.RequestHandler):
def get (samo):
self.write ("Pozdrav svijete")

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

ako je __name__ == "__glavni__":
app = make_app ()
app.listen (8888)
tornado.ioloop.IOLoop.current (). start ()

Tornado je snažno i posvećen slijeđenju u Python zajednici, a iskusni arhitekti ga koriste za izgradnju vrlo sposobnih sustava. To je okvir koji je dugo imao odgovor na probleme istodobnosti, ali možda nije postao mainstream jer ne podržava WSGI standard i bio je prevelik buy-in (sjetite se da je većina Python knjižnica i dalje sinkrona ).

Sanic

Sanic “moderan” je okvir u pravom smislu riječi: ne podržava Python verziju ispod 3.6, podržava jednostavnu i univerzalnu sintaksu async / čekajte izvan okvira, i kao rezultat, ne čini da čitate učitavanja dokumentacije i imajte na umu prednje slučajeve prije nego što napišete svoj prvi HTTP rukovatelj.

Kao rezultat, rezultirajuća sintaksa je prilično ugodna (po mom mišljenju, barem); podsjeća na kôd koji bi napisali s bilo kojim drugim mikrookvirom (na primjer, Flask, CherryPy) sa samo nekoliko asinhronih zapisa ukopanim u:

iz tvrtke sanic import Sanic
od sanic.response import json

app = Sanic ()

@ App.route ("/")
async def test (zahtjev):
vratiti json ({"zdravo": "svijet"})

ako je __name__ == "__glavni__":
app.run (host-"0.0.0.0", luka = ​​8000)

Sanic je vjerojatno najpopularniji i najomiljeniji asinhronski okvir u Python svijetu. Ima gotovo sve značajke koje biste željeli za svoje projekte – usmjeravanje, srednji softver, kolačiće, verzije verzija, nacrte, prikaze temeljene na klasama, statičke datoteke, strujanje, utičnice itd. – i ono što ne nudi izvan okvira – predložak, podrška baze podataka, I / O datoteke, redovi – mogu se dodati s obzirom da je za njih danas dovoljno knjižica asinhronizacije.

Vibora

Vibora Sanic je blizak rođak, osim što je fiksiran na tome da postane vani najbrži Python web server. U stvari, već prvi posjet njegove web stranice pozdravlja vas sa usporedbom okvira:

Kao što vidite, Vibora tvrdi da je nekoliko puta brži od klasičnih okvira i da je dvostruko brži od Sanica, najbližeg konkurenta. Naravno, referentne vrijednosti treba uzeti s zrnom soli. ��

Iako je po sintaksi i značajkama Vibora usporediva sa Sanicom (ili je možda čak i nešto bolja jer spaja popularne biblioteke i stvari poput predložaka dostupne su van okvira), smatrao bih da je Sanic zreliji jer je duže i duže veća zajednica.

iz tvrtke vibora import Vibora, JsonResponse

app = Vibora ()

‘App.route ( ‘/’),
async def home ():
povratak JsonResponse ({‘hello’: ‘svijet’})

ako je __name__ == ‘__main__’:
app.run (host-"0.0.0.0", luka = ​​8000)

Ako ste ipak ovisnik o performansama, Vibora će vam možda ploviti čamcem. To bi rekao, kako pišu Vibora podliježe potpunom prepisivanju kako bi postala još brža i veza u verziji za izvedbu kaže se da je pod “teškim razvojem.” Oni koji su pokupili Viboru ranije bit će iznevjereni i uskoro se moraju suočiti s promjenama, ali hej, rani su dani u svijetu Python async, i nitko ne očekuje da stvari budu stabilne.

Kvart

Ako uživate razvijati se u Flask, ali usrećujete zbog nedostatka podrške za asinkciju, uživat ćete Kvart puno.

Četvrt je u skladu s ASGI standard koji je nasljednik poznatog WSGI standarda i nudi async podršku. Zanimljivost kod Quart-a je da on nije samo sličan Flask-u, već je zapravo u skladu s Flask API-jem! Autor ovog okvira želio je sačuvati Flask osjećaj i samo mu dodati podršku async, WebSockets i HTTP 2. Kao rezultat toga, možete naučiti Quart izravno iz Flask dokumentacije, samo imajući na umu da su funkcije u Quartu asinhrone.

iz uvoza kvadrata Quart

app = kvart (__ name__)

‘App.route ( ‘/’),
async def hello ():
uzvrati ‘zdravo’

app.run ()

Osjeća se (gotovo) točno kao Flask, zar ne??!

Budući da je Quart evolucija bočice, dostupne su sve značajke unutar Flask-a: usmjeravanje, srednji softver, sesije, predloške, nacrti i tako dalje. U stvari, čak možete koristiti Flask ekstenzije izravno u kvartu. Jedna je spoznaja da je Python 3.7+ podržavan samo, ali, ako ne koristite najnoviju verziju Pythona, možda asinhcija nije pravi put. ��

Dokumentacija zaista želi ako nemate ranije iskustvo s Flask-om, ali mogu vam preporučiti Quart jer je to vjerojatno jedini okvir async-a koji se uskoro približio verziji 1.0.

FastAPI

Posljednji (ali najimpresivniji) okvir na ovom popisu je FastAPI. Ne, to nije samo API-okvir; Zapravo, čini se da je FastAPI najbogatiji i najbogatiji dokumentacijom okvira na koji sam naišao prilikom istraživanja async Python okvira.

Zanimljivo je primijetiti da je autor okvira detaljno proučavao nekoliko drugih okvira, od suvremenih poput Django do modernih poput Sanic, kao i pregledavanje tehnologija u NestJS (web-okvir Node.js, Typescript). Njihova filozofija razvoja i opsežne usporedbe mogu se pročitati ovdje.

Sintaksa je prilično ugodna; čak se može ustvrditi da je mnogo ugodnije od ostalih okvira na koje smo naišli:

rom fastapi uvoz FastAPI

app = FastAPI ()

@ App.get ("/ korisnik / mi")
async def read_user_me ():
povratak {"user_id": "trenutni korisnik"}

@ App.get ("/ korisnici / {user_id}")
async def read_user (user_id: str):
povratak {"user_id": user_id}

A sada, popis značajki ubojica zbog kojih FastAPI nadmašuje ostale okvire:

Automatska generacija dokumenata za API: Čim su vaše krajnje točke napisane, možete se igrati s API-jem koristeći korisničko sučelje koje je usklađeno sa standardima. Podržani su SwaggerUI, ReDoc i drugi.

Okvir čini i automatsku dokumentaciju modela podataka s JSON shemom.

Moderni razvoj: Da, riječ “moderno” se puno baca, ali našao sam FastAPI da zapravo progovori u njemu. Ovisnost o ubrizgavanju i nagovještavanje tipa su prvorazredni građani, primjenjujući ne samo dobre principe kodiranja, već dugoročno sprečavajući greške i zbrke..

Opsežna dokumentacija: Ne znam za tebe, ali svesrdno sam za dobru dokumentaciju. I na ovom području FastAPI pobijeđuje rukama. Ima stranica na stranicama dokumenata koji objašnjavaju gotovo svaku sitnicu i “pazi!” trenuci za programere svih razina. Osjećam jasno “srce i dušu” u ovim dokumentima, a jedina usporedba koju mogu pronaći su dokumenti Django (da, FastAPI dokumenti su tako dobri!).

Osim osnova: FastAPI ima podršku za WebSockets, Streaming, kao i GraphQL, osim što ima sve tradicionalne pomagače poput CORS, sesije, kolačiće i tako dalje.

A što je s predstavom? Pa, FastAPI je izgrađen na nevjerojatnoj knjižici Starlette, što rezultira performansama koje odgovaraju Nodeu, a u nekim slučajevima čak i Go! Sve u svemu, stvarno imam osjećaj da FastAPI ide dalje kao najbolji async okvir za Python.

Zaključak

Ovog dana se u krajoliku asistencije Python događa mnogo. Pojavljuju se novi okviri, prepisivaju se stari, a razvijaju se knjižnice kako bi odgovarale ponašanju asinhije. Iako Python ima ugrađenu podršku za petlju događaja, a dijelove vaše aplikacije moguće je učiniti async, možete odlučiti uključiti i nadograditi na jedan od okvira ovdje. Samo imajte na umu dugoročno: nekoliko okvira Python async vani postoje u ranim fazama i brzo se razvijaju, što će naštetiti vašem razvojnom procesu i povećati troškove poslovanja. Oprez je ključan!

Ali sve rečeno i učinjeno; Python je spreman za proizvodnju za postizanje svjetlosnih performansi kada je riječ o web okvirima. Ako ste tako dugo razmišljali o preseljenju u Node, sada to ne trebate! ��

Zvuči cool? Učitelj Python danas!

OZNAKE:

  • Piton

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