Top 5 asinhronih spletnih okvirov za Python

Asinhrono programiranje je v Pythonu zdaj prvovrstni državljan. Če ste spletni razvijalec, lahko izbirate med neverjetnimi okviri!


Kot piše, asinhronost ni več samo buzzword v skupnosti Python. Z izdajo svojega asincio knjižnica v različici 3.5, je Python priznal vpliv Node.js na spletni razvoj in v jezik uvedel dve novi ključni besedi – async in čaka. To je bilo zelo veliko, ker je jezik Python zelo previden pri razširitvi jedrnega sintakse, razen če obstaja nujna potreba, kar samo kaže na to, kako bistveno pomembni so razvijalci Pythona menili, da so asinhrone zmožnosti.

Posledično so se odprla protipožarna vrata asinhronega programiranja: nove in stare knjižnice so začele uporabljati funkcijo sorodnosti, asinhroni okviri so se razmahnili po popularnosti, novi pa se še danes pišejo. Učinkovitost, ki je enaka ali nižja od Node.js, se ne sliši, in če vaši vzorci nalaganja ne vključujejo številnih CPU opravil, ni razloga, da ne morete vložiti nekaj tisoč zahtevkov na sekundo.

Ampak dovolj motivacije!

Oglejmo trenutno pokrajino Python in si oglejmo nekaj najboljših asinhronih okvirov.

Tornado

Presenetljivo, Tornado sploh ni nov okvir. Njegova prvotna izdaja je bila leta 2009 (pred natanko desetimi leti je bilo pisno) in od takrat se osredotoča na zagotavljanje trdno asinhronega programiranja z visoko sočasnostjo.

Tornado v bistvu ni spletni okvir. To je zbirka asinhronih modulov, ki se uporabljajo tudi za izdelavo spletnega okvirnega modula. Natančneje so ti moduli:

  • Coroutine in drugi primitivi (tornado.gen, tornado.locks, tornado.queues itd.)
  • Omrežni moduli (tornado.ioloop, tornado.iostream itd.)
  • Asinhroni strežniki in odjemalci (tornado.httpserver, tornado.httpclient itd.)

Ti so bili kombinirani za izdelavo končnih okvirnih modulov: tornado.web, tornado.routing, tornado.template itd..

uvoz tornado.ioloop
uvoz tornado.web

razred MainHandler (tornado.web.RequestHandler):
def (samo):
self.write ("Pozdravljen, svet")

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

če je __name__ == "__ glavna__":
app = make_app ()
app.listen (8888)
tornado.ioloop.IOLoop.current (). start ()

Tornado je v skupnosti Python močno in zavzet, izkušeni arhitekti pa ga uporabljajo za izdelavo zelo sposobnih sistemov. To je okvir, ki že dolgo odgovarja na težave sočasnosti, vendar morda ni postal mainstream, saj ne podpira standarda WSGI in je bil preveč včlanitev (ne pozabite, da je večina knjižnic Python še vedno sinhrona ).

Sanič

Sanič je “sodoben” okvir v pravem pomenu besede: ne podpira različice Python pod 3.6, podpira preprosto in univerzalno sintakso async / čaka, da ne bo prebranih bremen dokumentacije in imejte v rokah primere, preden lahko napišete svoj prvi HTTP-ov obdelovalec.

Posledično je nastala skladnja precej prijetna (vsaj po mojem mnenju); spominja na kodo, ki jo napišete s katerim koli drugim mikrookvirjem (na primer Flask, CherryPy) z le nekaj posnetki asinhronizacije:

od uvoznika
iz sanic.response import json

app = Sanic ()

@ app.route ("/")
async def test (zahteva):
vrne json ({"zdravo": "svet"})

če je __name__ == "__ glavna__":
app.run (gostitelj =)"0,0.0,0", pristanišče = 8000)

Sanic je zagotovo najbolj priljubljen in najbolj ljubljen asinkovski okvir v svetu Pythonov. Ima skoraj vse funkcije, ki bi jih želeli za svoje projekte – usmerjanje, vmesno programsko opremo, piškotke, različice, načrte, poglede na podlagi razredov, statične datoteke, pretakanje, vtičnice itd. – in tistega, kar ne ponuja izven škatle – predloge, podpora za baze podatkov, vhodno-izhodne datoteke, čakalne vrste – lahko dodate dovolj knjižnic asinhronizacije za danes.

Vibora

Vibora je Sanicin bratranec, le da je zasnovan tako, da postane najhitrejši spletni strežnik Python. Pravzaprav vas že prvi obisk njegovega spletnega mesta pozdravi z okvirno primerjavo:

Kot vidite, Vibora trdi, da je nekajkrat hitrejši od klasičnih okvirov in je več kot dvakrat hitrejši od Sanica, njegovega najbližjega konkurenta. Seveda je treba merila upoštevati z zrnom soli. ��

Čeprav je Vibora po sintaksi in značilnostih primerljiv s Sanicem (ali morda celo nekoliko boljši, ker združuje priljubljene knjižnice in so stvari, kot so predloge, na voljo izven škatle), bi Sanic smatral, da je bolj zrel, ker je že dlje in ima večja skupnost.

iz uvoza vibora Vibora, JsonResponse

app = Vibora ()

@ app.route (‘/’)
async def home ():
vrni JsonResponse ({‘hello’: ‘svet’})

če je __name__ == ‘__main__’:
app.run (gostitelj =)"0,0.0,0", pristanišče = 8000)

Če ste nadobudni narkoman, pa bo Vibora morda plula z vašim čolnom. Glede na to, da se Vibora že piše, se loti popolnega prepisa, da postane še hitrejši, in povezava v različici izvedbe pravi, da je pod “težkim razvojem.” Tisti, ki so Viborje pobrali prej in bodo kmalu morali sprejeti spremembe, bodo pa slej ko prej spremenili spremembe, ampak hej, zgodnji dnevi so v svetu Python async in nihče ne pričakuje, da bodo stvari stabilne.

Kvart

Če uživate v razvoju v Flask-u, vendar obžalujete pomanjkanje podpore za asinhronizacijo, boste uživali Kvart veliko.

Quart je skladen z ASGI standard, ki je naslednik znanega standarda WSGI in ponuja async podporo. Zanimivost pri Quartu je ta, da ni samo podoben Flask-u, ampak je dejansko skladen s Flask API-jem! Avtor tega okvira je želel ohraniti občutek Flask in mu samo dodati async, WebSockets in podporo HTTP 2. Rezultat tega je, da se Quart lahko naučite neposredno iz dokumentacije, da upoštevate, da so funkcije v Quartu asinhrone.

iz uvoza

app = Quart (__ ime__)

@ app.route (‘/’)
async def hello ():
vrni se “zdravo”

app.run ()

Počuti se (skoraj) točno kot Flask, kajne??!

Ker je Quart razvoj Flask-a, so na voljo vse funkcije v Flask-u: usmerjanje, vmesna programska oprema, seje, predloge, načrti in podobno. Pravzaprav lahko celo uporabite razširitve Flask neposredno v kvartu. En ulov je, da je Python 3.7 ali novejši podprt, vendar, če ne uporabljate najnovejše različice Pythona, morda async ni prava pot. ��

Dokumentacija resnično želi, če še nimate izkušenj z Flask-om, vendar lahko Quartu priporočam, saj je verjetno edini async okvir, ki se kmalu približa izdaji 1.0.

FastAPI

Zadnji (a najbolj impresiven) okvir na tem seznamu je FastAPI. Ne, to ni samo za API; pravzaprav se zdi, da je FastAPI najpomembnejši in najbolj bogat dokumentacijski okvir, na katerega sem naletel pri raziskovanju okvirov async Python.

Zanimivo je, da je avtor okvirja podrobno preučil več drugih okvirov, od sodobnih, kot je Django, do modernih, kot je Sanic, in preučil tehnologije v NestJS (spletni okvir Node.js, Typescript). Njihovo filozofijo razvoja in obsežne primerjave lahko beremo tukaj.

Skladnja je precej prijetna; lahko celo trdimo, da je veliko bolj prijeten kot drugi okviri, na katere naletimo:

rom fastapi uvoz FastAPI

app = FastAPI ()

@ app.get ("/ uporabniki / jaz")
async def read_user_me ():
vrnitev {"Uporabniško ime": "trenutni uporabnik"}

@ app.get ("/ uporabniki / {user_id}")
async def read_user (user_id: str):
vrnitev {"Uporabniško ime": Uporabniško ime}

Zdaj pa je seznam funkcij morilcev, zaradi katerih FastAPI zasenči druge okvire:

Samodejna generacija doc API-jev: Takoj, ko bodo končne točke zapisane, se lahko z API-jem igrate s standardnim uporabniškim vmesnikom. Podprti so SwaggerUI, ReDoc in drugi.

Okvir naredi tudi avtomatsko dokumentacijo podatkovnih modelov s shemo JSON.

Sodoben razvoj: Da, beseda “moderno” se veliko vrti, toda ugotovil sem, da FastAPI dejansko govori. Vbrizgavanje odvisnosti in namiganje tipa sta državljana prvega razreda, ki uveljavljata ne le dobra načela kodiranja, ampak dolgoročno preprečujeta napake in zmede..

Obsežna dokumentacija: Ne vem za vas, vendar sem popoln zanič dobre dokumentacije. In na tem področju FastAPI zmaga na glavo. Ima strani na straneh dokumentov, ki pojasnjujejo skoraj vsako malenkost in “pazite!” trenutki za razvijalce vseh ravni. V dokumentih tukaj čutim jasno “srce in dušo” in edina primerjava, ki jo najdem, je dokumentov Django (ja, dokumenti FastAPI so tako dobri!).

Poleg osnov: FastAPI ima podporo za WebSockets, Streaming in tudi GraphQL, poleg tega pa ima na voljo vse tradicionalne pomočnike, kot so CORS, seje, piškotki itd..

In kaj je s predstavo? No, FastAPI je zgrajen na neverjetni knjižnici Starlette, kar ima za posledico zmogljivost, ki ustreza Node, ponekod pa celo Go! Na splošno imam res občutek, da bo FastAPI dirkal naprej kot vrhunski async okvir za Python.

Zaključek

V teh dneh se v pokrajini Python async dogaja veliko. Pojavijo se novi okviri, stari se prenavljajo in razvijajo se knjižnice, da bi ustrezale asinhcionalnemu obnašanju. Medtem ko ima Python vgrajeno podporo za zanko dogodkov in je mogoče del vaše aplikacije narediti async, lahko tukaj izberete vse več in nadgradite enega od okvirov. Ne pozabite, da boste imeli dolgoročno v mislih: več okvirov asinhcije Python tam je v zgodnjih fazah in se hitro razvija, kar bo škodovalo vašemu razvojnemu procesu in povečalo poslovne stroške. Previdnost je ključna!

Toda vse povedano in storjeno; Python je pripravljen za proizvodnjo, da zagotavlja jasne učinke, ko gre za spletne okvire. Če ste tako dolgo razmišljali o selitvi v Node, vam zdaj ni treba! ��

Sliši se kul? Mojster Python danes!

Oznake:

  • 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