5 populaarseimat asünkroonset veebiraamistikku Pythoni jaoks

Asünkroonne programmeerimine on Pythonis esmaklassiline kodanik. Kui olete veebiarendaja, saate valida hämmastavate raamistike vahel!


Kirjutamise hetkest alates pole asünkroonne Pythoni kogukonnas enam ainult võlusõna. Selle vabastamisega asyncio raamatukogu 3.5 versioonis tunnistas Python Node.js mõju veebiarendusele ja tutvustas keelde kahte uut märksõna – async ja oota. See oli väga suur asi, kuna Pythoni keel on tuumasüntaksi laiendamisel äärmiselt ettevaatlik, välja arvatud juhul, kui selleks on tungiv vajadus, mis näitab vaid seda, kui fundamentaalselt olulised on Pythoni arendajad asünkroonsed võimalused.

Selle tulemusel avati asünkroonse programmeerimise tulvad: uued ja vanad raamatukogud hakkasid kasutama korutiinide funktsiooni, asünkroonsed raamistikud hakkasid populaarsust koguma ja uusi kirjutatakse endiselt. Toimivus, mis on Node.js-ga võrdne või parem, ei ole ennekuulmatu ja kui teie laadimisharjumused ei hõlma palju protsessori jaoks raskeid ülesandeid, pole mingit põhjust, miks te ei saa teha paar tuhat taotlust sekundis.

Kuid piisavalt motivatsiooni!

Vaatleme praegust Pythoni maastikku ja tutvuge mõnede parimate asünkroonsete raamistikega.

Tornaado

Üllatavalt, Tornaado pole üldse uus raamistik. Selle esimene väljalase oli 2009. aastal (täpselt kümme aastat tagasi, alates kirjutamisest) ja sellest ajast alates on keskendunud suure kindla samaaegsusega kivitahke asünkroonse programmeerimise pakkumisele.

Tornado pole põhimõtteliselt veebiraamistik. See on asünkroonsete moodulite kollektsioon, mida kasutatakse ka veebi raamistiku mooduli ehitamiseks. Täpsemalt, need moodulid on:

  • Korutiinid ja muud primitiivid (tornado.gen, tornado.locks, tornado.queues jne)
  • Võrgumoodulid (tornado.ioloop, tornado.iostream jne)
  • Asünkroonsed serverid ja kliendid (tornado.httpserver, tornado.httpclient jne)

Need on ühendatud, et saada lõplikud raammoodulid: tornado.web, tornado.routing, tornado.template jne..

import tornado.ioloop
import tornado.web

klass MainHandler (tornado.web.RequestHandler):
def saada (ise):
omakirjutus ("Tere, Maailm")

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

kui __name__ == "__main__":
rakendus = make_app ()
app.listen (8888)
tornado.ioloop.IOLoop.current (). start ()

Tornaadol on Pythoni kogukonnas tugev ja pühendunud jälgija ning kogenud arhitektid kasutavad seda väga võimekate süsteemide ehitamiseks. See on raamistik, millel on juba pikka aega olnud vastus samaaegsuse probleemidele, kuid mis võib-olla ei muutunud tavapäraseks, kuna see ei toeta WSGI standardit ja oli liiga suur sisseost (pidage meeles, et suurem osa Pythoni raamatukogudest on endiselt sünkroonis ).

Sanic

Sanic on “tänapäevane” raamistik selle sõna otseses tähenduses: see ei toeta Pythoni versiooni alla 3.6, toetab lihtsat ja universaalset asünkrooni / ootab süntaksi karbist ja seetõttu ei pane see teid lugema enne kui saate kirjutada oma esimese HTTP-töötleja, pidage oma dokumentide vormistamist silmas pidades ja pidage eeskuju.

Selle tulemusel on saadud süntaks üsna meeldiv (vähemalt minu arvates); see sarnaneb koodiga, mille kirjutaksite mõne muu mikroraamiga (näiteks Flask, CherryPy) ja millele on puistatud vaid mõni asink:

alates sanic import Sanic
saidilt sanic.response import json

rakendus = Sanic ()

@ app.route ("/")
asynci def-test (taotlus):
tagasi json ({"Tere": "maailm"})

kui __name__ == "__main__":
app.run (host ="0.0.0.0", port = 8000)

Sanic on vaieldamatult kõige populaarsem ja armastatuim asünkraamistik Pythoni maailmas. Sellel on peaaegu kõik funktsioonid, mida oma projektidele soovite – marsruutimine, vahetarkvara, küpsised, versioonide koostamine, joonised, klassipõhised vaated, staatilised failid, voogesitus, pistikupesad jne – ja mida see pakutavast välja ei paku – mallide koostamine, andmebaaside tugi, faili sisend / väljund, järjekorrad – saab lisada, kuna täna on nende jaoks async-teekide jaoks lihtsalt piisavalt palju.

Vibora

Vibora on Sanici lähedane nõbu, välja arvatud see, et ta on kindlalt saanud kiireimaks Pythoni veebiserveriks seal. Tegelikult tervitab selle veebisaidi esimene külastus teid raamistiku võrdlusega:

Nagu näete, väidab Vibora, et on mitu korda kiirem kui klassikalised raamid ja on enam kui kaks korda kiirem kui lähim konkurent Sanic. Mõistagi tuleb võrdlusaluseid võtta koos teraviljaga. ��

Ehkki süntaksis ja funktsioonides on Vibora võrreldav Sanicuga (või võib-olla isegi pisut parem, kuna see komplekteerib populaarseid raamatukogusid ja sellised asjad nagu mallid on karbist saadaval), peaksin Sanicit küpsemaks pidama, kuna see on juba kauem käes olnud ja suurem kogukond.

alates vibora import Vibora, JsonResponse

rakendus = Vibora ()

@ app.route (‘/’)
async def home ():
tagasta JsonResponse ({‘tere’: ‘maailm’})

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

Kui te olete etenduskunstnik, võib Vibora teie paati hõljuda. See tähendab, et alates kirjutamisest on Vibora tegemas täielikku ümberkirjutamist, et saada veelgi kiiremaks, ja link jõudlusversiooni kohaselt on see raske arengu all. See langeb neile, kes viisid Vibora varem üles ja peagi peavad nad seisma silmitsi murranguliste muutustega, aga hei, Python asynci maailmas on algusajad ja keegi ei oota, et asjad oleksid stabiilsed.

Kvartal

Kui teile meeldib Flaskis arendamine, kuid asülli toe puudumine, saate seda nautida Kvartal palju.

Quart vastab standardile ASGI standard, mis on kuulsa WSGI standardi järglane ja pakub asünkrooni tuge. Quarti jaoks on huvitav see, et see pole mitte ainult sarnane Flaskiga, vaid vastab tegelikult ka Flaski API-le! Selle raamistiku autor soovis säilitada Flaski tunde ja lisada sellele lihtsalt asünkri, WebSocketsi ja HTTP 2 toe. Selle tulemusel saate Quarti õppida otse klaasi dokumentatsioonist, pidades meeles ainult seda, et Quarti funktsioonid on asünkroonsed.

alates kvartali impordi kvartal

rakendus = kvartal (__ nimi__)

@ app.route (‘/’)
async def tere ():
tagasta ‘tere’

app.run ()

Tundub (peaaegu) täpselt nagu Flask, eksole?!

Kuna Quart on Flaski evolutsioon, on saadaval kõik Flaski sisemised funktsioonid: marsruutimine, vahetarkvara, seansid, mallid, joonised jne. Tegelikult võite kasutada ka kolvipikendusi otse Quarti sees. Üks asi on see, et Python 3.7+ toetatakse ainult siis, kui te ei kasuta Pythoni uusimat versiooni, pole async võib-olla õige tee. ��

Dokumentatsiooni on tõesti vaja, kui teil pole Flaskiga varasemaid kogemusi, kuid võin soovitada Quarti, kuna see on tõenäoliselt ainus asünkroonimisraamistik, mis varsti oma 1.0 väljaande läheneb.

FastAPI

Viimane (kuid kõige muljetavaldavam) raamistik selles loendis on FastAPI. Ei, see pole ainult API-de raamistik; tegelikult näib FastAPI olevat kõige funktsioonirikkam ja dokumendirikkam raamistik, millega ma async Pythoni raamistike uurimisel kokku puutusin.

Huvitav on tõdeda, et raamistiku autor uuris põhjalikult mitut muud raamistikku, alates tänapäevastest nagu Django kuni tänapäevasteni nagu Sanic, ning uurides tehnoloogiaid NestJS-i (Node.js, Typescripti veebiraamistik). Nende arengufilosoofiast ja ulatuslikest võrdlustest saab lugeda siin.

Süntaks on üsna meeldiv; võib isegi väita, et see on palju nauditavam kui teised raamistikud, millega oleme kokku puutunud:

rom fastapi import FastAPI

rakendus = FastAPI ()

@ app.get ("/ kasutajad / mina")
async def read_user_me ():
tagastama {"kasutaja ID": "praegune kasutaja"}

@ app.get ("/ kasutajad / {user_id}")
async def read_user (user_id: str):
tagastama {"kasutaja ID": kasutaja ID}

Ja nüüd on nimekiri tapjafunktsioonidest, mis muudavad FastAPI teistest raamidest väljapoole:

Automaatne API-dokumentide genereerimine: Niipea kui teie lõpp-punktid on kirjutatud, saate API-ga mängida standarditega ühilduva kasutajaliidese abil. SwaggerUI, ReDoc ja teised on toetatud.

Raamistik teeb ka automaatse andmemudeli dokumentatsiooni JSON-skeemi abil.

Kaasaegne areng: Jah, sõna “moodne” visatakse palju ümber, kuid leidsin, et FastAPI kõndis selle jutu järgi. Sõltuvuse süstimine ja tüübi vihje on esmaklassilised kodanikud, kes jõustavad lisaks headele kodeerimispõhimõtetele ka pikas perspektiivis vigade ja segiajamise ärahoidmise.

Mahukas dokumentatsioon: Ma ei tea sinust, aga ma olen hea dokumenteerimise eest totaalselt looja. Ja selles valdkonnas võidab FastAPI käed alla. Sellel on lehekülgi dokumentide lehekülgedel, mis selgitavad peaaegu kõiki väikeseid peensusi ja „olge valvel!“ hetked kõigi tasemete arendajatele. Tunnen siinsetes dokumentides selget “südant ja hinge” ning ainus võrdlus, mida ma leian, on Django dokumendid (jah, FastAPI dokumendid on nii head!).

Lisaks põhitõdedele: FastAPI-l on lisaks WebSocketsile, voogesitusele ja ka GraphQLile tugi, lisaks kõigil tavapärastel abistajatel nagu CORS, seansid, küpsised jne.

Ja kuidas etendus? Noh, FastAPI on üles ehitatud hämmastavale Starlette’i teegile, mille tulemuseks on jõudlus, mis sobib sõlmele ja mõnel juhul isegi Go! Kokkuvõttes on mul tõesti tunne, et FastAPI kavatseb Pythoni tipp-asünkriraamistikuna edasi sõita.

Järeldus

Nendel päevadel toimub Pythoni asünkri maastikul palju. Uued raamistikud ilmuvad, vanad kirjutatakse ümber ja raamatukogusid arendatakse asünkliku käitumisega vastavusse. Kuigi Pythonil on sisseehitatud tugi sündmusekontuurile ja teie rakenduse asünkroone on võimalik osadeks muuta, saate valida, kas all-in ja kõik siin olevad raamistikud üles ehitada. Pidage ainult meeles, et pidage silmas pikaajalist perspektiivi: mitmed seal olevad Pythoni asünkri raamistikud on alles algusjärgus ja arenevad kiiresti, mis kahjustab teie arendusprotsessi ja suurendab ärikulusid. Oluline on ettevaatlikkus!

Kuid kõik öeldi ja tehti; Python on veebitootmisraamide tootmiseks valmis valgustusvälise jõudluse tagamiseks. Kui nii kaua olete mõelnud migreeruda sõlme, siis nüüd ei pea te seda tegema! ��

Kõlab lahedalt? Master Python täna!

Sildid:

  • Python

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