Quart چیست؟
Quart یک فریمورک وب پایتون است که برای ایجاد برنامههای وب مدرن و با عملکرد بالا طراحی شده است. این فریمورک مشابه فریمورک محبوب Flask است، اما از قابلیتهای برنامهنویسی غیرهمزمان (Asynchronous) با استفاده از دستور async و await در پایتون پشتیبانی میکند.
این ویژگی باعث میشود Quart توانایی پردازش همزمان درخواستهای متعدد را بدون مسدود کردن سرور در حین انجام عملیات I/O (ورودی/خروجی) داشته باشد.
به طور سادهتر، Quart نسخهای مدرن از Flask است که قابلیتهای برنامهنویسی غیرهمزمان را اضافه کرده و برای برنامههایی که نیاز به پردازش همزمان دارند، مناسب است. این نوع برنامهها شامل چتها، اعلانهای زنده، یا API هایی هستند که نیاز به بهروزرسانیهای مکرر داده دارند.
تفاوت Quart با Flask چیست؟
Flask و Quart شباهتهای زیادی دارند، اما تفاوت اصلی آنها در نحوه پردازش درخواستها و نحوه مدیریت همزمانی (Concurrency) است.
- پشتیبانی از برنامهنویسی غیرهمزمان (Asynchronous):
- Flask یک فریمورک همزمان (Synchronous) است، به این معنی که هر درخواست باید به طور کامل پردازش شود تا درخواست بعدی پردازش شود. اگر درخواستی نیاز به انجام عملیات I/O (مثل پرسوجو از پایگاه داده یا خواندن فایل) داشته باشد، سرور تا اتمام آن عملیات مسدود میشود.
- Quart از برنامهنویسی غیرهمزمان (Asynchronous) پشتیبانی میکند، که به کمک کتابخانه asyncio پایتون، اجازه میدهد سرور به طور همزمان چندین درخواست را پردازش کند بدون اینکه سرور مسدود شود.
- پردازش درخواستها:
- در Flask، توابع مربوط به درخواستها به صورت همزمان اجرا میشوند، یعنی پس از دریافت درخواست، سرور باید منتظر بماند تا پردازش کامل شود و سپس پاسخ به کاربر داده شود.
- در Quart، توابع مربوط به درخواستها میتوانند به صورت غیرهمزمان – با استفاده از async def – تعریف شوند، بنابراین در حین پردازش یک درخواست، میتوان درخواستهای دیگر را نیز پردازش کرد.
- WSGI در مقابل ASGI :
- Flask بر اساس استاندارد WSGI (Web Server Gateway Interface) ساخته شده است، که همزمان عمل میکند و به طور پیشفرض از برنامهنویسی غیرهمزمان پشتیبانی نمیکند.
- Quart بر اساس ASGI (Asynchronous Server Gateway Interface) ساخته شده است که از برنامهنویسی غیرهمزمان پشتیبانی میکند و میتواند ارتباطات طولانیمدت مانند WebSocketها را به راحتی مدیریت کند.
- مورد استفاده:
- Flask برای برنامههای وب ساده که نیاز به پردازش همزمان تعداد کمی از درخواستها دارند و یا برنامههایی که به I/O وابسته نیستند، مناسب است.
- Quart برای برنامههایی که نیاز به پردازش همزمان تعداد زیادی از درخواستها دارند، مانند چتروومها، اعلانهای زنده، یا APIهایی که بهروزرسانیهای مکرر دارند، مناسب است.
تاریخچه و ایجاد Quart
Quart توسط متیو مککلور، همان شخصی که Flask را ایجاد کرده است، طراحی شده است. هدف از ایجاد Quart افزودن قابلیتهای غیرهمزمان به فریمورکی مشابه Flask بود. اولین نسخه از Quart در سال ۲۰۱۸ منتشر شد. هدف اصلی از ایجاد این فریمورک این بود که نیازهای برنامههای وب مدرن که باید درخواستهای همزمان زیادی را پردازش کنند، به خوبی پشتیبانی شود.
از آن زمان به بعد، Quart بهروز رسانیهای زیادی دریافت کرده و به یک فریمورک بالغ تبدیل شده است که اکنون میتواند با اکثر افزونههای Flask به راحتی ادغام شود.
چگونه Quart کار میکند؟
معماری Quart بر اساس کتابخانه asyncio پایتون ساخته شده است، که به آن اجازه میدهد کدهای غیرهمزمان را اجرا کند و اتصالات مختلف را به طور همزمان پردازش کند. در اینجا نحوه عملکرد Quart را به طور خلاصه توضیح میدهیم:
- پردازش درخواستها: زمانی که کلاینت درخواستی به سرور ارسال میکند، Quart درخواست را به تابع مناسب هدایت میکند. اگر این تابع غیرهمزمان باشد (یعنی با async تعریف شود)، Quart در حین انجام عملیات I/O، اجازه میدهد درخواستهای دیگر نیز پردازش شوند.
- I/O غیرهمزمان: در یک سرور وب همزمان، اگر درخواستی نیاز به انجام عملیاتی طولانیمدت مانند query از دیتابیس داشته باشد، سرور منتظر میماند تا این عملیات تکمیل شود و سپس ادامه پردازش را انجام میدهد. اما در Quart، چون توابع درخواستها غیرهمزمان هستند، سرور میتواند در حین انجام یک عملیات طولانی، سایر درخواستها را پردازش کند.
- پشتیبانی از WebSocket : Quart از WebSocketها بهطور درونی پشتیبانی میکند، که برای ارتباطات زنده و بلادرنگ (real-time) مفید هستن Flask بهطور پیشفرض از WebSocket پشتیبانی نمیکند، اما میتوان با استفاده از افزونهها این قابلیت را اضافه کرد. در Quart، این امکان به صورت داخلی وجود دارد.
- ادغام با افزونههای Flask : Quart بهگونهای طراحی شده که تا حد ممکن مشابه Flask باشد، بنابراین بسیاری از افزونههای محبوب Flask مانند Flask-SQLAlchemy یا Flask-Migrate میتوانند به راحتی در Quart نیز استفاده شوند. البته باید توجه داشت که برخی افزونهها که بر اساس کد همزمان طراحی شدهاند، ممکن است نیاز به تغییراتی برای کار کردن در Quart داشته باشند.
- سرور: ASGI : Quart برای اجرا به یک سرور ASGI (مثل uvicorn یا hypercorn ) نیاز دارد که به طور خاص برای اجرای برنامههای وب غیرهمزمان طراحی شده است. این سرورها درخواستها را میگیرند و به اپلیکیشن Quart ارسال میکنند.
نمونهای از Quart در عمل
در اینجا یک مثال ساده از نحوه استفاده از Quart برای ایجاد یک برنامه وب با توابع غیرهمزمان آورده شده است:
from quart import Quart, jsonify
app = Quart(__name__)
@app.route(‘/’)
async def hello():
return jsonify({“message”: “Hello, World!”})
@app.route(‘/async-task’)
async def async_task():
# شبیهسازی یک وظیفه طولانیمدت غیرهمزمان
await asyncio.sleep(3)
return jsonify({“message”: “Task completed!”})
if __name__ == ‘__main__’:
app.run()
در این مثال:
- مسیر اول (/) به سادگی یک پاسخ JSON برمیگرداند.
- مسیر دوم (/async-task) شبیهسازی یک وظیفه طولانیمدت (مانند انتظار برای یک API خارجی) را با استفاده از asyncio.sleep() انجام میدهد، و در همین زمان، سرور میتواند درخواستهای دیگری را نیز پردازش کند.
مزایای Quart
- I/O غیرهمزمان: توانایی Quart در انجام عملیات I/O غیرهمزمان باعث میشود که شما نیازی به نگرانی در مورد مدیریت(threads) نداشته باشید و بتوانید برنامههای مقیاسپذیرتر بسازید.
- ارتباطات زنده: پشتیبانی از WebSocket بهطور بومی در Quart باعث میشود که برای برنامههای ارتباطی زنده مانند چت، اعلانها و همکاریهای آنی، انتخاب خوبی باشد.
- سینتکس مشابه Flask: اگر با Flask آشنا هستید، API و نحوه استفاده از Quart برای شما بسیار آشنا خواهد بود و انتقال به برنامهنویسی غیرهمزمان را سادهتر میکند.
- مقیاسپذیر: Quart برای برنامههایی که نیاز به پردازش همزمان حجم زیادی از درخواستها دارند، به خوبی مقیاسپذیر است و میتواند این حجم از درخواستها را با کارایی بالاتر مدیریت کند.
چه زمانی باید از Quart استفاده کنید؟
- برنامههای ارتباط زنده: اگر برنامهای مانند چت یا سیستم اعلان دارید که نیاز به ارتباطات بلادرنگ دارد، Quart انتخاب خوبی است.
- وظایف I/O غیرهمزمان: اگر برنامه شما نیاز به انتظار برای منابع خارجی مانند پایگاه داده یا APIها دارد، استفاده از Quart باعث میشود که در حین انتظار، سرور به پردازش سایر درخواستها ادامه دهد.
- APIهای مقیاسپذیر: اگر پیشبینی میکنید که برنامه شما باید تعداد زیادی کاربر همزمان را پردازش کند، ویژگیهای غیرهمزمان Quart باعث میشود که مقیاسپذیری بهتری داشته باشید.
- مروری بر Quart در پایتون - بهمن ۲, ۱۴۰۳
- مقدمه ای بر Embedded Linux (بخش دوم) - دی ۱۳, ۱۴۰۳
- مقدمه ای بر Embedded Linux (بخش اول) - آذر ۲۰, ۱۴۰۳