Top 5 cadre web asincrone pentru Python

Programarea asincronă este acum un cetățean de primă clasă în Python. Dacă sunteți dezvoltator web, puteți alege dintre cadre uimitoare!


În ceea ce privește scrierea, asincronul nu mai este doar un cuvânt cuvinte în comunitatea Python. Odată cu eliberarea lui asyncio biblioteca în versiunea 3.5, Python a recunoscut impactul Node.js asupra dezvoltării web și a introdus două noi cuvinte cheie în limbaj – async și așteaptă. Aceasta a fost o afacere foarte mare, deoarece limbajul Python este extrem de prudent să extindă sintaxa de bază, cu excepția cazului în care există o nevoie stringentă, ceea ce indică doar importanța fundamentală a dezvoltatorilor Python considerate capabilitățile asincrone.

Ca urmare, au fost deschise porți de programare asincrone: bibliotecile noi și vechi au început să folosească caracteristica coroutine, cadrele asincrone au explodat în popularitate, iar altele noi sunt încă scrise astăzi. Performanța la egalitate sau mai bună decât Node.js nu este neașteptată și, dacă modelele dvs. de încărcare implică o mulțime de sarcini grele de procesor, nu există niciun motiv pentru care nu puteți face câteva mii de solicitări pe secundă..

Dar suficientă motivație!

Să analizăm actualul peisaj Python și să vedem unele dintre cadrele asincrone de top.

Tornadă

surprinzător, Tornadă nu este deloc un cadru nou. Lansarea sa inițială a fost în 2009 (exact cu zece ani în urmă, la scriere) și de atunci, accentul său a fost să furnizeze o programare asincronă solid-rock cu concurență ridicată.

Tornado nu este fundamental un cadru web. Este o colecție de module asincrone, care sunt de asemenea utilizate pentru a construi modulul cadru web. Mai precis, aceste module sunt:

  • Coroutine și alte elemente primitive (tornado.gen, tornado.locks, tornado.queues etc.)
  • Module de rețea (tornado.ioloop, tornado.iostream etc.)
  • Servere și clienți asincroni (tornado.httpserver, tornado.httpclient etc.)

Acestea au fost combinate pentru a produce modulele cadru finale: tornado.web, tornado.routing, tornado.template etc..

import tornado.ioloop
import tornado.web

clasa MainHandler (tornado.web.RequestHandler):
def get (self):
self.write ("Salut Lume")

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

dacă __name__ == "__principal__":
app = make_app ()
app.listen (8888)
tornado.ioloop.IOLoop.current (). start ()

Tornado are urmări puternice și angajate în comunitatea Python și este folosit de arhitecți cu experiență pentru a construi sisteme extrem de capabile. Este un cadru care a avut mult timp răspunsul la problemele de concurgență, dar poate nu a devenit mainstream, deoarece nu acceptă standardul WSGI și a fost prea mult un buy-in (nu uitați că cea mai mare parte a bibliotecilor Python sunt încă sincrone. ).

Sanic

Sanic este un cadru „modern” în adevăratul sens al cuvântului: nu acceptă versiunea Python sub 3.6, acceptă sintaxa simplă și universală de async / așteaptă din cutie și, prin urmare, nu te face să citești încărcături. de documentare și păstrați-vă în minte cazurile de margine înainte de a putea scrie primul dvs. instrument de gestionare HTTP.

Drept urmare, sintaxa rezultată este destul de plăcută (după părerea mea, cel puțin); seamănă cu codul pe care l-ar fi scris cu orice alt microframă (Flask, CherryPy, de exemplu) cu doar câteva async presărate în:

din import sanic Sanic
din sanic.response import json

app = Sanic ()

@ App.route ("/")
test async def (cerere):
returnează json ({"buna": "lume"})

dacă __name__ == "__principal__":
app.run (host ="0.0.0.0", port = 8000)

Sanic este, probabil, cel mai popular și mai iubit cadru async din lumea Python. Are aproape toate funcțiile pe care le-ați dori pentru proiectele dvs. – rutare, middleware, cookie-uri, versioning, planuri, vizualizări bazate pe clasă, fișiere statice, streaming, prize, etc. – și ceea ce nu oferă din cutie. – șablonarea, suportul bazelor de date, I / O de fișiere, cozi – pot fi adăugate deoarece există suficiente biblioteci async pentru acestea începând de astăzi.

Vibora

Vibora este un văr apropiat al lui Sanic, cu excepția faptului că s-a hotărât să devină cel mai rapid server web Python de acolo. De fapt, prima vizită a site-ului său web vă întâmpină cu o comparație cadru:

După cum puteți vedea, Vibora susține că este de câteva ori mai rapid decât cadrele clasice și că este de peste două ori mai rapid decât Sanic, cel mai apropiat concurent. Desigur, valorile de referință trebuie luate cu un bob de sare. ��

Deși în sintaxă și caracteristici, Vibora este comparabilă cu Sanic (sau poate chiar ușor mai bun, întrucât înglobează bibliotecile populare și lucruri precum șablonul sunt disponibile din cutie), aș considera că Sanic este mai matur, deoarece a trecut de mai mult timp și are o comunitate mai mare.

din vibora import Vibora, JsonResponse

app = Vibora ()

@ App.route ( ‘/’)
async def home ():
returnați JsonResponse ({‘salut’: ‘lume’})

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

Dacă sunteți un junkie performant, Vibora ar putea pluti barca. Acestea fiind spuse, Vibora scade o rescriere completă pentru a deveni și mai rapid și legătură versiunea sa de performanță spune că se află în „dezvoltare puternică”. Va fi renunțat la cei care au ridicat Vibora mai devreme și în curând trebuie să se confrunte cu schimbări rupte, dar hei, este zilele de început în lumea async Python și nimeni nu se așteaptă ca lucrurile să fie stabile.

cvartă

Dacă vă place să vă dezvoltați în Flask, dar considerați lipsa asistenței async, vă veți bucura cvartă mult.

Quart respectă ASGI standard, care este succesorul faimosului standard WSGI și oferă suport asincic. Lucrul interesant despre Quart este că nu este asemănător doar cu Flask, ci este în realitate compatibil cu API-ul Flask! Autorul acestui cadru a dorit să păstreze senzația Flask și să adauge doar suport async, WebSockets și HTTP 2. Drept urmare, puteți învăța Quart chiar din documentația Flask, ținând cont doar că funcțiile din Quart sunt asincrone.

din quart import Quart

aplicație = Quart (__ nume__)

@ App.route ( ‘/’)
async def salut ():
retur „salut”

app.run ()

Se simte (aproape) exact ca Flask, nu-i așa?!

Întrucât Quart este o evoluție a lui Flask, toate funcțiile din Flask sunt disponibile: rutare, middleware, sesiuni, șabloane, planuri etc. De fapt, puteți folosi chiar și extensiile Flask direct în interiorul Quart. Un lucru este că Python 3.7+ este acceptat doar, dar, dacă nu executați cea mai recentă versiune a Python, poate că async nu este calea cea bună. ��

Documentația dorește cu adevărat dacă nu aveți experiență anterioară cu Flask, dar vă pot recomanda Quart, deoarece este probabil singurul cadru async care se apropie de lansarea 1.0 în curând..

FastAPI

Ultimul cadru (dar cel mai impresionant) din această listă este FastAPI. Nu, nu este un cadru numai pentru API; de fapt, FastAPI pare a fi cel mai bogat caracteristică și documente bogate în documente pe care le-am întâlnit când am cercetat cadre async Python.

Este interesant de menționat că autorul cadrului a studiat mai multe alte cadre în profunzime, de la cele contemporane precum Django la cele moderne precum Sanic, precum și căutarea tehnologiilor în NestJS (un Node.js, un cadru web Typescript). Filozofia de dezvoltare a acestora și comparații extinse pot fi citite aici.

Sintaxa este destul de plăcută; se poate chiar afirma că este mult mai plăcut decât celelalte cadre pe care le-am întâlnit:

rom fastapi import FastAPI

app = FastAPI ()

@ App.get ("/ utilizatorii / mi")
async def read_user_me ():
întoarcere {"numele de utilizator": "utilizatorul curent"}

@ App.get ("/ utilizatori / {user_id}")
async def read_user (user_id: str):
întoarcere {"numele de utilizator": numele de utilizator}

Și acum, lista de funcții ucigașe care fac ca FastAPI să depășească alte cadre:

Generare automată de documente API: De îndată ce punctele tale finale au fost scrise, poți să te joci cu API-ul folosind o interfață de utilizator compatibilă cu standardele. SwaggerUI, ReDoc și altele sunt acceptate.

Cadrul realizează, de asemenea, documentația automată a modelului de date cu schema JSON.

Dezvoltare modernă: Da, cuvântul „modern” se aruncă foarte mult, dar am găsit FastAPI de fapt pentru a-și putea vorbi. Injecția de dependență și sugestia de tip sunt cetățeni de primă clasă, aplicând nu numai principii de codificare bune, ci previn erorile și confuziile pe termen lung.

Documentație extinsă: Nu știu despre tine, dar sunt un fraier total pentru o documentare bună. Și în acest domeniu, FastAPI câștigă hands-down. Are pagini pe pagini de documente care explică aproape orice mică subtilitate și „atenție!” momente pentru dezvoltatori de toate nivelurile. Simt o „inimă și suflet” clare în documentele de aici, iar singura comparație pe care o pot găsi este documentele Django (da, documentele FastAPI sunt foarte bune!).

Dincolo de elementele de bază: FastAPI are suport pentru WebSockets, Streaming, precum și GraphQL, pe lângă faptul că are toți ajutoarele tradiționale precum CORS, sesiuni, cookie-uri, etc..

Și cum rămâne cu performanța? Ei bine, FastAPI este construit pe uimitoarea bibliotecă Starlette, rezultând performanțe care se potrivesc cu Node și, în unele cazuri, chiar și Go! În total, am cu adevărat senzația că FastAPI urmează să concureze drept cel mai bun cadru de async pentru Python.

Concluzie

În multe zile se întâmplă multe în peisajul asincic Python. Noile cadre apar, cele vechi sunt rescrise și bibliotecile sunt evoluate pentru a se potrivi cu comportamentul asincic. Deși Python are asistență integrată pentru o buclă de evenimente și este posibil să facă async părți din aplicația dvs., puteți alege să accesați totul și să construiți unul dintre cadrele de aici. Doar asigurați-vă că țineți minte pe termen lung: mai multe dintre cadrele asincice Python existente în stadii incipiente și sunt în curs de evoluție rapidă, ceea ce va afecta procesul de dezvoltare și va crește costurile afacerii. Atenție este esențială!

Dar toate s-au spus și s-au făcut; Python este gata de producție pentru a oferi performanțe reduse atunci când vine vorba de cadre web. Dacă de mult timp v-ați gândit să migrați la Node, nu va mai fi necesar! ��

Suna bine? Maestrul Python astăzi!

ETICHETE:

  • 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