5 најбољих асинхроних веб оквира за Питхон

Асинхроно програмирање је сада прворазредни грађанин у Питхон-у. Ако сте веб програмер, можете бирати између невероватних оквира!

Што се тиче писања, асинхрони више није само популарна реч у Питхон заједници. Издавањем свог асинцио библиотека у верзији 3.5, Питхон је признао утицај Ноде.јс-а на развој веба и увео две нове кључне речи у језик — асинц и аваит. Ово је била велика ствар јер је језик Питхон изузетно опрезан у погледу проширења синтаксе језгра осим ако не постоји хитна потреба, што само указује на то колико су програмери Питхон-а фундаментално важним сматрали асинхроне могућности.

Као резултат тога, отворене су капије асинхроног програмирања: нове и старе библиотеке су почеле да користе функцију корутина, асинхрони оквири су експлодирали у популарности, а нови се пишу и данас. Перформансе једнаке или боље од Ноде.јс-а нису нечувене, и осим ако ваши обрасци учитавања не укључују много ЦПУ-тешких задатака, нема разлога зашто не можете да направите неколико хиљада захтева у секунди.

Али довољно мотивације!

Хајде да испитамо тренутни Питхон пејзаж и погледамо неке од најбољих асинхроних оквира.

Торнадо

изненађујуће, Торнадо уопште није нови оквир. Његово почетно издање било је 2009. (пре тачно десет година, од тренутка писања) и од тада је његов фокус био на пружању чврстог асинхроног програмирања са високом конкурентношћу.

Торнадо у основи није веб оквир. То је колекција асинхроних модула, који се такође користе за прављење модула веб оквира. Тачније, ови модули су:

  • Корутине и други примитиви (торнадо.ген, торнадо.лоцкс, торнадо.куеуес, итд.)
  • Мрежни модули (торнадо.иолооп, торнадо.иостреам, итд.)
  • Асинхрони сервери и клијенти (торнадо.хттпсервер, торнадо.хттпцлиент, итд.)

Они су комбиновани да би се произвели коначни модули оквира: торнадо.веб, торнадо.роутинг, торнадо.темплате, итд.

import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")

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

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

Торнадо има јаке и посвећене следбенике у Питхон заједници и користе га искусни архитекти за изградњу високо способних система. То је оквир који већ дуго има одговор на проблеме истовремености, али можда није постао мејнстрим јер не подржава ВСГИ стандард и био је превелики купац (запамтите да је већина Питхон библиотека још увек синхрона ).

  Битцоин и криптовалуте: инфлаторни вс. Дефлаторно

Санић

Санић је „модерни“ оквир у правом смислу те речи: не подржава Питхон верзију старију од 3.6, подржава једноставну и универзалну синтаксу асинц/аваит из кутије, и као резултат тога, не тера вас да читате садржаје документације и запамтите крајње случајеве пре него што напишете свој први ХТТП руковалац.

Као резултат тога, резултујућа синтакса је прилично пријатна (бар по мом мишљењу); подсећа на код који бисте написали са било којим другим микрофрамеворком (Фласк, ЦхерриПи, на пример) са само неколико асинхронизованих:

from sanic import Sanic
from sanic.response import json

app = Sanic()

@app.route("/")
async def test(request):
    return json({"hello": "world"})

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

Саниц је вероватно најпопуларнији и најомиљенији асинхронистички оквир у Питхон свету. Има скоро све функције које бисте желели за своје пројекте — рутирање, међуверски софтвер, колачиће, верзионисање, нацрте, погледе засноване на класама, статичке датотеке, стримовање, утичнице, итд. — и оно што не нуди из кутије — шаблонирање, подршка за базу података, улаз/излаз датотека, редови — могу се додати јер од данас постоји довољно асинхронизованих библиотека за њих.

Вибора

Вибора је Санићев близак рођак, осим што је фиксиран на то да постане најбржи Питхон веб сервер. У ствари, прва посета његовој веб страници вас поздравља са оквирним поређењем:

Као што видите, Вибора тврди да је неколико пута бржа од класичних оквира и да је више него двоструко бржа од Саница, свог најближег конкурента. Наравно, мерила треба узети са резервом. 🙂

Иако је по синтакси и карактеристикама Вибора упоредива са Саниц-ом (или можда чак и мало боља јер обједињује популарне библиотеке и ствари попут шаблона су доступне ван кутије), сматрао бих да је Саниц зрелији јер постоји дуже и већа заједница.

from vibora import Vibora, JsonResponse

app = Vibora()

@app.route('/')
async def home():
    return JsonResponse({'hello': 'world'})

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

Међутим, ако сте зависник од перформанси, Вибора би могла да плута вашим чамцем. Ипак, од писања Вибора не ради на потпуном преправљању како би постала још бржа, и линк за његову верзију перформанси каже да је у „тешком развоју“. Биће то разочарање за оне који су раније узели Вибору и ускоро ће се морати суочити са озбиљним променама, али хеј, рани су дани у Питхон асинц свету и нико не очекује да ће ствари бити стабилне.

  7 најбољих алата за предиктивну аналитику за доношење одлука на основу података

Куарт

Ако уживате у развоју у Фласку, али жалите због недостатка асинхронизоване подршке, уживаћете Куарт много.

Куарт је у складу са АСГИ стандард, који је наследник познатог ВСГИ стандарда и нуди асинхронизовану подршку. Интересантна ствар у вези са Куарт-ом је да није само сличан Фласку, већ је и усаглашен са Фласк АПИ-јем! Аутор овог оквира је желео да сачува осећај Фласк-а и само му дода подршку за асинхронизацију, ВебСоцкетс и ХТТП 2. Као резултат тога, Куарт можете научити директно из Фласк документације, само имајући на уму да су функције у Куарт-у асинхроне.

from quart import Quart

app = Quart(__name__)

@app.route('/')
async def hello():
    return 'hello'

app.run()

Осећа се (скоро) баш као Фласк, зар не?!

Пошто је Куарт еволуција Фласк-а, доступне су све функције унутар Фласка: рутирање, средњи софтвер, сесије, шаблони, нацрти итд. У ствари, можете чак користити екстензије Фласк директно унутар Куарт-а. Једна квака је да је подржан само Питхон 3.7+, али, онда, ако не користите најновију верзију Питхона, можда асинхронизација није прави пут. 🙂

Документација је заиста потребна ако немате раније искуство са Фласком, али могу да препоручим Куарт јер је то вероватно једини асинхронизовани оквир који се ускоро приближава издању 1.0.

ФастАПИ

Последњи (али најупечатљивији) оквир на овој листи је ФастАПИ. Не, то није оквир само за АПИ; у ствари, чини се да је ФастАПИ најбогатији оквир функцијама и документацијом на који сам наишао када сам истраживао асинхронизоване Питхон оквире.

Занимљиво је приметити да је аутор оквира детаљно проучавао неколико других оквира, од савремених као што је Дјанго до модерних као што је Саниц, као и гледајући низ технологија у НестЈС (Ноде.јс, Типесцрипт веб оквир). Може се прочитати њихова развојна филозофија и опсежна поређења овде.

Синтакса је прилично пријатна; може се чак тврдити да је много пријатнији од других оквира на које смо наишли:

rom fastapi import FastAPI

app = FastAPI()

@app.get("/users/me")
async def read_user_me():
    return {"user_id": "the current user"}

@app.get("/users/{user_id}")
async def read_user(user_id: str):
    return {"user_id": user_id}

А сада, листа убиствених функција које чине да ФастАПИ надмаши друге оквире:

  Како да погледате и одштампате своје Амазон признанице

Аутоматско генерисање докумената АПИ-ја: Чим су ваше крајње тачке написане, можете се играти са АПИ-јем помоћу корисничког интерфејса усклађеног са стандардима. Подржани су СваггерУИ, РеДоц и други.

Оквир такође ради аутоматску документацију модела података са ЈСОН шемом.

Савремени развој: Да, реч „модерно“ се често користи, али открио сам да ФастАПИ заправо води свој говор. Ињекција зависности и наговештавање типа су првокласни грађани, који примењују не само добре принципе кодирања, већ спречавају грешке и конфузију на дуге стазе.

Обимна документација: Не знам за вас, али ја сам потпуни наивчина за добру документацију. И у овој области ФастАПИ побеђује. Има странице за страницама докумената који објашњавају скоро сваку малу суптилност и „пазите!“ тренуци за програмере свих нивоа. Осећам јасно „срце и душу“ у документима овде, а једино поређење које могу да нађем су Дјанго документи (да, ФастАПИ документи су тако добри!).

Осим основа: ФастАПИ има подршку за ВебСоцкетс, Стреаминг, као и ГрапхКЛ, осим што има све традиционалне помоћнике као што су ЦОРС, сесије, колачићи и тако даље.

А шта је са перформансом? Па, ФастАПИ је изграђен на невероватној библиотеци Старлетте, што резултира перформансама које одговарају Ноде-у, ау неким случајевима чак и Го! Све у свему, заиста имам осећај да ће ФастАПИ јурити напред као врхунски асинхронизовани оквир за Питхон.

Закључак

Много тога се дешава у Питхон асинц пејзажу ових дана. Појављују се нови оквири, стари се преписују, а библиотеке се развијају тако да одговарају асинхронизованом понашању. Иако Питхон има уграђену подршку за петљу догађаја и могуће је да делове ваше апликације учините асинхронизованим, можете изабрати да уђете у све и изградите један од оквира овде. Само будите сигурни да имате на уму дугорочно: неколико Питхон асинхроничних оквира је у раним фазама и брзо се развијају, што ће наштетити вашем развојном процесу и повећати пословне трошкове. Опрез је кључан!

Али све речено и урађено; Питхон је спреман за производњу да испоручи лагане перформансе када су у питању веб оквири. Ако сте толико дуго размишљали да пређете на Ноде, сада не морате! 🙂

Звучи кул? Мастер Питхон данас!