Top 5 asynchrone webraamwerke vir Python

Asynchroniese programmering is nou ‘n eersteklas burger in Python. As u ‘n webontwikkelaar is, is daar ongelooflike kaders wat u kan kies!


Asyn is asynchronies nie meer net ‘n alarmwoord in die Python-gemeenskap nie. Met die vrystelling daarvan asyncio biblioteek in weergawe 3.5, het Python erken die impak van Node.js op webontwikkeling en stel twee nuwe sleutelwoorde in die taal voor – asynchroniseer en wag. Dit was ‘n baie groot ding, want die Python-taal is baie versigtig vir die uitbreiding van die kern-sintaksis, tensy daar ‘n dringende behoefte is, wat slegs aandui hoe fundamenteel belangrik die Python-ontwikkelaars die asinchroniese vermoëns beskou..

As gevolg hiervan is vloedhekke van asynchrone programmering geopen: biblioteke, oud en oud, het die coroutines-funksie begin gebruik, asynchroniese raamwerke het in gewildheid ontplof, en daar word vandag nog nuwes geskryf. Prestasies gelykstaande aan of beter as die van Node.js is ongehoord, en tensy u laaipatrone baie CPU-swaar take behels, is daar geen rede waarom u nie ‘n paar duisend versoeke per sekonde kan rig nie.

Maar genoeg motivering!

Kom ons kyk na die huidige Python-landskap en kyk na die top asynchrone raamwerke.

tornado

verbasend, tornado is glad nie ‘n nuwe raamwerk nie. Die aanvanklike vrystelling daarvan was in 2009 (presies tien jaar gelede, as gevolg van skryf) en sedertdien is die fokus daarop om rotsvaste asinchroniese programmering met ‘n hoë gelyktydigheid te bied.

Tornado is nie fundamenteel ‘n webraamwerk nie. Dit is ‘n versameling asynchrone modules wat ook gebruik word om die webraamwerkmodule te bou. Meer spesifiek is hierdie modules:

  • Coroutines en ander primitiewe (tornado.gen, tornado.locks, tornado.queues, ens.)
  • Netwerkmodules (tornado.ioloop, tornado.iostream, ens.)
  • Asynchroniese bedieners en kliënte (tornado.httpserver, tornado.httpclient, ens.)

Dit is gekombineer om die finale raamwerkmodules te vervaardig: tornado.web, tornado.routing, tornado.template, ens..

voer tornado.ioloop in
voer tornado.web in

klas MainHandler (tornado.web.RequestHandler):
def kry (self):
self.write ("Hello Wêreld")

def make_app ():
terugkeer tornado.web.Aansoek ([
(r"/", MainHandler),
])

as __naam__ == "__main__":
app = make_app ()
app.listen (8888)
tornado.ioloop.IOLoop.current (). begin ()

Tornado het ‘n sterk en toegewyde navolging in die Python-gemeenskap en word deur ervare argitekte gebruik om stelsels wat baie bekwaam is, te bou. Dit is ‘n raamwerk wat al lank die antwoord op die probleme van gelyktydigheid gehad het, maar miskien nie hoofstroom geword het nie, omdat dit nie die WSGI-standaard ondersteun nie en te veel van ‘n koop was (onthou dat die grootste deel van die Python-biblioteke steeds sinchroon is) ).

Sanic

Sanic is ‘n ‘moderne’ raamwerk in die ware sin van die woord: dit ondersteun nie die Python-weergawe onder 3.6 nie, ondersteun die eenvoudige en universele sintaksis / afwagting uit die kassie, en lei daartoe dat u nie baie lees nie van dokumentasie en hou sake in gedagte voordat u u eerste HTTP-hanteerder kan skryf.

As gevolg hiervan is die gevolglike sintaksis redelik aangenaam (na my mening ten minste); dit lyk soos die kode wat u met enige ander mikro-raamwerk (Flask, CherryPy, byvoorbeeld) sou skryf, met slegs ‘n paar asink wat daaroor gestrooi is:

van Sanic invoer Sanic
van sanic.response import json

app = Sanic ()

@ App.route ("/")
async def-toets (versoek):
terugkeer json ({"hallo": "wêreld"})

as __naam__ == "__main__":
app.run (host ="0.0.0.0", port = 8000)

Sanic is waarskynlik die gewildste en mees geliefde asink-raamwerk in die Python-wêreld. Dit het byna alle funksies wat u vir u projekte wil hê – routing, middelware, koekies, weergawe, bloudrukke, klasgebaseerde weergawes, statiese lêers, streaming, sockets, ens. – en wat dit nie buite die kassie bied nie – templatering, databasisondersteuning, I / O-lêers, toue – kan bygevoeg word, want daar is net genoeg async-biblioteke daarvoor vanaf vandag.

Vibora

Vibora is ‘n hegte neef van Sanic, behalwe dat dit vasgestel is dat hy die vinnigste Python-webbediener is. Die heel eerste besoek van die webwerf verwelkom jou met ‘n raamwerkvergelyking:

Soos u kan sien, beweer Vibora dat hy ‘n paar keer vinniger is as die klassieke raamwerke en dat sy meer as twee keer so vinnig is as Sanic, sy naaste mededinger. Daar moet natuurlik maatstawwe geneem word met ‘n soutgraan. ��

Alhoewel Vibora in sintaksis en funksies vergelykbaar is met Sanic (of miskien selfs effens beter, aangesien dit gewilde biblioteke saamvat en dinge soos templatering beskikbaar is), sou ek Sanic beskou as meer volwasse omdat dit langer bestaan ​​en ‘n groter gemeenskap.

van vibora invoer Vibora, JsonResponse

app = Vibora ()

@ App.route ( ‘/’)
async def home ():
terugkeer JsonResponse ({‘hallo’: ‘wêreld’})

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

As jy ‘n prestasie-junkie is, kan Vibora egter jou boot dryf. Dit gesê, terwyl Vibora ‘n volledige herskryf ondergaan om dit nog vinniger te maak, en die skakel volgens sy uitvoeringsweergawe is dit onder ‘swaar ontwikkeling’. Dit gaan ‘n beswyming wees vir diegene wat Vibora vroeër opgetel het en binnekort breekende veranderinge moet ondervind, maar hey, dit is vroeë dae in die Python-asink-wêreld, en niemand verwag dat dinge stabiel sal wees nie.

Quart

As u dit geniet om in Flask te ontwikkel, maar die gebrek aan ondersteuning asynk doen, sal u dit geniet Quart baie.

Quart voldoen aan die VGGI standaard, wat ‘n opvolger van die beroemde WSGI-standaard is en asynksteun bied. Die interessante ding met Quart is dat dit nie net soortgelyk aan Flask is nie, maar ook voldoen aan die Flask API! Die skrywer van hierdie raamwerk wou die Flask-gevoel behou en voeg net async, WebSockets en HTTP 2-ondersteuning daarby. As gevolg hiervan, kan u Quart uit die Flask-dokumentasie leer, net in gedagte hou dat funksies in Quart asynchronies is.

vanaf kwart invoer Quart

app = kwart (__ naam__)

@ App.route ( ‘/’)
async def hallo ():
keer terug ‘hallo’

app.run ()

Voel (amper) presies soos Flask, dit nie?!

Aangesien Quart ‘n evolusie van Flask is, is al die funksies in Flask beskikbaar: routing, middelware, sessies, templatering, bloudrukke, ensovoorts. In werklikheid kan u selfs Flask-uitbreidings direk binne Quart gebruik. Een punt is dat Python 3.7+ slegs ondersteun word, maar as u nie die nuutste weergawe van Python gebruik nie, is async miskien nie die regte pad nie. ��

Die dokumentasie wil regtig nie as u nie vroeër ervaring met Flask het nie, maar ek kan Quart aanbeveel, want dit is waarskynlik die enigste asinkroniese raamwerk wat binnekort by die 1.0-weergawe beskikbaar is.

FastAPI

Die laaste (maar indrukwekkendste) raamwerk op hierdie lys is FastAPI. Nee, dit is nie ‘n API-raamwerk nie; eintlik lyk dit asof FastAPI die mees funksie-ryk en dokumentasie-ryke raamwerk is wat ek teëgekom het toe ek asinkryke Python-raamwerke ondersoek het.

Dit is interessant om daarop te let dat die raamwerkskrywer verskeie ander raamwerke in die diepte bestudeer het, van die hedendaagse soos Django tot moderne soos Sanic, sowel as om tegnologieë in NestJS (‘n Node.js, Typescript-webraamwerk) te ondersoek. Hulle ontwikkelingsfilosofie en uitgebreide vergelykings kan gelees word hier.

Die sintaksis is baie aangenaam; mens kan selfs redeneer dat dit baie aangenamer is as die ander raamwerke wat ons teëgekom het:

rom fastapi invoer van FastAPI

app = FastAPI ()

@ App.get ("/ Gebruikers / my")
async def read_user_me ():
keer terug {"USER_ID": "die huidige gebruiker"}

@ App.get ("/ Gebruikers / {USER_ID}")
async def read_user (user_id: str):
keer terug {"USER_ID": user_id}

En nou is die lys moordenaarsfunksies wat FastAPI beter as ander raamwerke oorskry:

Outomatiese API-dokumentgenerering: Sodra u eindpunte geskryf is, kan u met die API speel met ‘n UI wat aan standaarde voldoen. SwaggerUI, ReDoc, en ander word ondersteun.

Die raamwerk doen ook outomatiese dokumentasie van datamodelle met JSON Schema.

Moderne ontwikkeling: Ja, die woord “modern” word baie rondgeslinger, maar ek het FastAPI gevind om te praat. Afhanklikheid Inspuiting en tipering is eersteklas burgers, wat nie net goeie koderingsbeginsels afdwing nie, maar op die lange duur foute en verwarring voorkom..

Uitgebreide dokumentasie: Ek weet nie van jou nie, maar ek is ‘n totale voorliefde vir goeie dokumentasie. En op hierdie gebied wen FastAPI hand-down. Dit bevat bladsye op bladsye met dokumente wat byna elke klein subtiliteit verduidelik en “let op!” oomblikke vir ontwikkelaars van alle vlakke. Ek voel ‘n duidelike ‘hart en siel’ in die dokumente hier, en die enigste vergelyking wat ek kan vind is die Django-dokumente (ja, FastAPI-dokumente is so goed!).

Behalwe die basiese beginsels: FastAPI het ondersteuning vir WebSockets, streaming, sowel as GraphQL, behalwe om al die tradisionele helpers soos CORS, sessies, koekies, ensovoorts te hê..

En wat van die uitvoering? Wel, FastAPI is gebou op die ongelooflike Starlette-biblioteek, wat lei tot prestasies wat ooreenstem met Node, en in sommige gevalle selfs Go! Alles in ag genome het ek die gevoel dat FastAPI vooruit sal gaan jaag as die boonste asinkroniese raamwerk vir Python.

Afsluiting

Daar is deesdae baie in die Python-asink-landskap. Nuwe raamwerke verskyn, oues word herskryf en biblioteke word ontwikkel om by die sinchroniese gedrag te pas. Terwyl Python ingeboude ondersteuning het vir ‘n gebeurtenislus en dit moontlik is om dele van u toepassing asynchroniseer, kan u kies om alles in te gaan en op een van die raamwerke hier voort te bou. Let daarop dat u die langtermyn in gedagte hou: verskeie van die Python-asink-raamwerke daar buite is in ‘n vroeë stadium en word vinnig ontwikkel, wat u ontwikkelingsproses sal beseer en sakekoste kan verhoog. Versigtigheid is die sleutel!

Maar almal sê en doen; Python is produksieklaar om liguitvoering te lewer as dit kom by webraamwerke. As u so lank daaraan dink om na Node oor te skakel, hoef u dit nie te doen nie! ��

Klink gaaf? Master Python vandag!

Tags:

  • 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