5 Kerangka Kerja Web Asinkron untuk Python

Pemrograman asinkron adalah warga negara kelas satu di Python sekarang. Jika Anda seorang pengembang web, ada kerangka kerja luar biasa yang dapat Anda pilih!


Pada saat penulisan, asinkron tidak lagi hanya kata kunci di komunitas Python. Dengan rilisnya asyncio Perpustakaan dalam versi 3.5, Python mengakui dampak Node.js pada pengembangan web dan memperkenalkan dua kata kunci baru ke dalam bahasa – async dan menunggu. Ini adalah masalah yang sangat besar karena bahasa Python sangat waspada dalam memperluas sintaksis inti kecuali jika ada kebutuhan mendesak, yang hanya menunjukkan betapa pentingnya pengembang Python menganggap kemampuan asinkron..

Akibatnya, pintu banjir pemrograman asinkron dibuka: perpustakaan baru dan lama mulai memanfaatkan fitur coroutine, kerangka kerja asinkron meledak dalam popularitas, dan yang baru masih sedang ditulis hari ini. Kinerja setara atau lebih baik dari Node.js tidak pernah terdengar, dan kecuali jika pola pemuatan Anda melibatkan banyak tugas berat CPU, tidak ada alasan mengapa Anda tidak dapat membuat beberapa ribu permintaan per detik.

Tapi motivasi cukup!

Mari kita survei lanskap Python saat ini dan lihat beberapa kerangka kerja asinkron atas.

Angin topan

Heran, Angin topan sama sekali bukan kerangka kerja baru. Rilis awalnya adalah pada tahun 2009 (tepat sepuluh tahun yang lalu, pada saat penulisan) dan sejak itu, fokusnya adalah pada penyediaan pemrograman asinkron rock-solid dengan konkurensi tinggi.

Tornado bukan kerangka kerja web secara fundamental. Ini adalah kumpulan modul asinkron, yang juga digunakan untuk membangun modul kerangka kerja web. Lebih khusus lagi, modul-modul ini adalah:

  • Coroutine dan primitif lainnya (tornado.gen, tornado.locks, tornado.queues, dll.)
  • Modul jaringan (tornado.ioloop, tornado.iostream, dll.)
  • Server dan klien asinkron (tornado.httpserver, tornado.httpclient, dll.)

Ini telah digabungkan untuk menghasilkan modul kerangka akhir: tornado.web, tornado.routing, tornado.template, dll.

impor tornado.ioloop
import tornado.web

kelas MainHandler (tornado.web.RequestHandler):
def get (self):
self.write ("Halo Dunia")

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

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

Tornado memiliki pengikut yang kuat dan berkomitmen di komunitas Python dan digunakan oleh arsitek berpengalaman untuk membangun sistem yang sangat mampu. Ini adalah kerangka kerja yang telah lama memiliki jawaban untuk masalah konkurensi tetapi mungkin tidak menjadi arus utama karena tidak mendukung standar WSGI dan terlalu banyak mendukung (ingat bahwa sebagian besar pustaka Python masih sinkron. ).

Sanic

Sanic adalah kerangka kerja “modern” dalam arti sebenarnya: tidak mendukung versi Python di bawah 3.6, mendukung sintaks async / menunggu sederhana dan universal di luar kotak, dan sebagai hasilnya, tidak membuat Anda membaca banyak dokumentasi dan menyimpan kasus tepi dalam pikiran Anda sebelum Anda dapat menulis HTTP handler pertama Anda.

Akibatnya, sintaks yang dihasilkan cukup menyenangkan (menurut saya, setidaknya); itu menyerupai kode yang Anda tulis dengan mikroframografi lain (Flask, CherryPy, misalnya) dengan hanya beberapa async yang ditaburkan di:

dari sanic import Sanic
dari sanic.response import json

app = Sanic ()

@ app.route ("/")
tes def async (permintaan):
return json ({"Halo": "dunia"})

jika __name__ == "__utama__":
app.run (host ="0.0.0.0", port = 8000)

Sanic bisa dibilang kerangka async paling populer dan paling dicintai di dunia Python. Ini memiliki hampir semua fitur yang Anda inginkan untuk proyek Anda – perutean, middleware, cookie, versi, cetak biru, tampilan berbasis kelas, file statis, streaming, soket, dll. – dan apa yang tidak ditawarkan di luar kotak – templating, dukungan database, file I / O, antrian – dapat ditambahkan karena hanya ada cukup pustaka async untuk ini pada hari ini.

Vibora

Vibora adalah sepupu dekat Sanic, kecuali bahwa itu terpaku pada menjadi server web Python tercepat di luar sana. Bahkan, kunjungan pertama situs webnya menyambut Anda dengan perbandingan kerangka kerja:

Seperti yang Anda lihat, Vibora mengklaim beberapa kali lebih cepat daripada kerangka klasik dan lebih dari dua kali lebih cepat dari Sanic, pesaing terdekatnya. Tentu saja, tolok ukur harus diambil dengan sebutir garam. ��

Meskipun dalam sintaks dan fitur, Vibora dapat dibandingkan dengan Sanic (atau bahkan mungkin sedikit lebih baik karena bundel perpustakaan populer dan hal-hal seperti templating tersedia di luar kotak), saya akan menganggap Sanic lebih dewasa karena sudah ada lebih lama dan memiliki komunitas yang lebih besar.

dari 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)

Namun, jika Anda pecandu kinerja, Vibora mungkin akan mengapungkan perahu Anda. Yang mengatakan, saat menulis Vibora sedang menulis ulang lengkap untuk menjadi lebih cepat, dan tautan ke versi kinerjanya mengatakan itu di bawah “pengembangan berat.” Ini akan mengecewakan bagi mereka yang mengambil Vibora lebih awal dan segera harus menghadapi perubahan, tapi hei, ini hari-hari awal di dunia Python async, dan tidak ada yang mengharapkan hal-hal menjadi stabil.

Kuart

Jika Anda menikmati pengembangan di Flask tetapi menyesali kurangnya dukungan async, Anda akan menikmati Kuart banyak.

Quart sesuai dengan ASGI standar, yang merupakan penerus standar WSGI yang terkenal dan menawarkan dukungan async. Hal yang menarik tentang Quart adalah tidak hanya mirip dengan Flask tetapi juga sesuai dengan Flask API! Penulis kerangka kerja ini ingin mempertahankan rasa Flask dan hanya menambahkan dukungan async, WebSockets, dan HTTP 2. Sebagai hasilnya, Anda dapat mempelajari Quart langsung dari dokumentasi Flask, hanya mengingat bahwa fungsi-fungsi di Quart tidak sinkron..

dari quart import Quart

app = Quart (__ name__)

@ app.route (‘/’)
async def hello ():
kembalikan ‘halo’

app.run ()

Terasa (hampir) persis seperti Flask, bukan??!

Karena Quart adalah evolusi dari Flask, semua fitur di dalam Flask tersedia: perutean, middleware, sesi, templating, cetak biru, dan sebagainya. Bahkan, Anda bahkan dapat menggunakan ekstensi Flask langsung di dalam Quart. Satu tangkapan adalah bahwa Python 3.7+ hanya didukung, tetapi, jika Anda tidak menjalankan versi terbaru Python, mungkin async bukan jalan yang benar. ��

Dokumentasi benar-benar ingin jika Anda tidak memiliki pengalaman sebelumnya dengan Flask, tetapi saya dapat merekomendasikan Quart karena mungkin satu-satunya kerangka kerja async yang mendekati rilis 1.0 segera.

FastAPI

Kerangka kerja terakhir (tetapi paling mengesankan) dalam daftar ini adalah FastAPI. Tidak, ini bukan kerangka kerja khusus API; pada kenyataannya, FastAPI tampaknya menjadi kerangka kerja yang paling kaya fitur dan dokumentasi yang saya temui ketika meneliti kerangka Python async.

Sangat menarik untuk dicatat bahwa penulis kerangka mempelajari beberapa kerangka kerja lainnya secara mendalam, dari yang kontemporer seperti Django hingga yang modern seperti Sanic, serta melihat berbagai teknologi ke dalam NestJS (a Node.js, kerangka kerja web ScriptScript). Filosofi pengembangan mereka dan perbandingan yang luas dapat dibaca sini.

Sintaksnya cukup menyenangkan; seseorang bahkan dapat berargumen bahwa itu jauh lebih menyenangkan daripada kerangka kerja lain yang pernah kami temui:

rom fastapi import FastAPI

app = FastAPI ()

@ app.get ("/ pengguna / saya")
async def read_user_me ():
kembali {"identitas pengguna": "pengguna saat ini"}

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

Dan sekarang, daftar fitur pembunuh yang membuat FastAPI mengungguli kerangka kerja lain:

Pembuatan dokumen API otomatis: Segera setelah titik akhir Anda ditulis, Anda dapat bermain dengan API menggunakan UI yang memenuhi standar. SwaggerUI, ReDoc, dan lainnya didukung.

Kerangka kerja ini juga melakukan dokumentasi model data otomatis dengan Skema JSON.

Perkembangan modern: Ya, kata “modern” sering dilontarkan, tetapi saya mendapati FastAPI benar-benar berjalan dalam pembicaraannya. Injeksi Ketergantungan dan petunjuk tipe adalah warga negara kelas satu, yang menegakkan bukan hanya prinsip pengkodean yang baik tetapi juga mencegah bug dan kebingungan dalam jangka panjang.

Dokumentasi yang luas: Saya tidak tahu tentang Anda, tetapi saya benar-benar payah untuk dokumentasi yang baik. Dan di area ini, FastAPI menang dengan mudah. Ini memiliki halaman demi halaman dokumen yang menjelaskan hampir setiap kehalusan kecil dan “hati-hati!” momen untuk pengembang dari semua tingkatan. Saya merasakan “hati dan jiwa” yang jelas dalam dokumen di sini, dan satu-satunya perbandingan yang dapat saya temukan adalah dokumen Django (ya, dokumen FastAPI sebaik itu!).

Melampaui dasar-dasar: FastAPI memiliki dukungan untuk WebSockets, Streaming, serta GraphQL, selain memiliki semua pembantu tradisional seperti CORS, sesi, cookie, dan sebagainya..

Dan bagaimana dengan kinerjanya? Ya, FastAPI dibangun di atas pustaka Starlette yang menakjubkan, menghasilkan kinerja yang cocok dengan Node, dan dalam beberapa kasus, bahkan Go! Semua dalam semua, saya benar-benar merasa bahwa FastAPI akan berpacu ke depan sebagai kerangka kerja async teratas untuk Python.

Kesimpulan

Banyak hal yang terjadi di lanskap async Python hari ini. Kerangka kerja baru bermunculan, yang lama sedang ditulis ulang, dan perpustakaan sedang dikembangkan untuk mencocokkan perilaku async. Meskipun Python memiliki dukungan bawaan untuk perulangan acara dan memungkinkan untuk membuat bagian dari aplikasi Anda async, Anda dapat memilih untuk masuk semua dan membangun salah satu kerangka kerja di sini. Pastikan untuk mengingat jangka panjang: beberapa kerangka kerja Python async ada di tahap awal dan sedang dikembangkan dengan cepat, yang akan merusak proses pengembangan Anda dan meningkatkan biaya bisnis. Perhatian adalah kunci!

Tetapi semua dikatakan dan dilakukan; Python siap berproduksi untuk memberikan kinerja cahaya ketika datang ke kerangka kerja web. Jika sudah lama Anda berpikir untuk bermigrasi ke Node, sekarang Anda tidak perlu! ��

Terdengar keren? Kuasai Python hari ini!

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