برنامه نویسی

برنامه نویسی ناهمزمان با FastAPI: API های کارآمد ساختمان

مقدمه

در توسعه وب مدرن ، ساخت API های مقیاس پذیر و کارآمد ضروری است. در حالی که API های همزمان سنتی به خوبی به ما خدمت کرده اند ، آنها می توانند هنگام برخورد با همزمانی بالا یا عملیات طولانی مدت ، به یک تنگنا تبدیل شوند. وارد کردن برنامه نویسی ناهمزمان، ابزاری قدرتمند که به شما امکان می دهد عملیات غیر مسدود کننده را انجام داده و همزمان درخواست های بسیاری را انجام دهید.

Fastapi ، یک چارچوب وب مدرن پایتون ، پشتیبانی بومی را برای برنامه نویسی ناهمزمان فراهم می کند و آن را به یک انتخاب خارق العاده برای ساختن API های با کارایی بالا تبدیل می کند. در این پست وبلاگ ، ما بررسی خواهیم کرد که چگونه برنامه نویسی ناهمزمان در FastAPI کار می کند و چرا برای API های کارآمد در ساختمان بسیار مهم است.

برنامه نویسی ناهمزمان چیست؟

برنامه نویسی ناهمزمان کد شما را قادر می سازد تا کارهایی مانند عملیات I/O (به عنوان مثال ، نمایش داده های پایگاه داده ، خواندن پرونده یا تماس های شبکه) انجام دهد بدون اینکه موضوع اصلی اجرای را مسدود کند. در یک برنامه همزمان سنتی ، هر عملیات I/O نخ را تا زمان تکمیل مسدود می کند. با این حال ، در برنامه نویسی ناهمزمان ، این عملیات “در پس زمینه” انجام می شود و به برنامه اجازه می دهد پردازش سایر کارهای را بدون انتظار ادامه دهد.

چرا از برنامه نویسی ناهمزمان در Fastapi استفاده می کنیم؟

  1. همزمانی: برنامه نویسی ناهمزمان اجازه می دهد تا چندین کار I/O را به طور همزمان انجام دهید بدون اینکه منتظر بمانید تا هرکدام قبل از شروع کار بعدی به پایان برسند. این امر به ویژه برای برنامه هایی که بسیاری از درخواست های API را به طور همزمان انجام می دهند مفید است.

  2. عملیات غیر مسدود کننده: با کد ASYNC ، API شما می تواند بدون کند کردن کل فرآیند با پایگاه داده ها ، خدمات خارجی یا پرونده ها در تعامل باشد.

  3. تقویت عملکرد: FastAPI از نمودارها و مسیرهای ناهمزمان پشتیبانی می کند ، به این معنی که می توانید بدون اضافه کردن سخت افزار یا سرورهای قابل توجه ، برنامه خود را بهتر مقیاس کنید.

تنظیم FastAPI با پشتیبانی ناهمزمان

Fastapi ساخت API های ناهمزمان را ساده می کند. این چارچوب با استفاده از پایتون از دستگیره های مسیر ناهمزمان پشتیبانی می کند async/await نحو بیایید نحوه تنظیم یک برنامه اصلی FastAPI را با عملکرد ناهمزمان بررسی کنیم.

نصب

برای شروع با برنامه نویسی FastAPI و ناهمزمان ، ابتدا باید FastAPI را نصب کنید uvicorn (سرور ASGI).

pip install fastapi uvicorn
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

ایجاد یک نقطه پایانی API ناهمزمان

بیایید یک برنامه FastAPI ساده با یک نقطه پایانی ناهمزمان ایجاد کنیم:

from fastapi import FastAPI
import asyncio

app = FastAPI()

# Simulate a long-running I/O-bound task
async def fake_db_query():
    await asyncio.sleep(2)  # Simulate a delay (e.g., database query)
    return {"message": "Data fetched from the database"}

@app.get("/data")
async def get_data():
    data = await fake_db_query()  # Wait for the fake DB query to finish
    return data
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

در این مثال ، get_data مسیر ناهمزمان است و از آن استفاده می کند await فراخوانی fake_db_query، که تأخیر را شبیه سازی می کند که گویی در حال پرس و جو یک پایگاه داده است. با استفاده از async وت await، ما اطمینان حاصل می کنیم که سرور می تواند درخواست های دیگری را در حالی که منتظر تکمیل پرس و جو جعلی DB هستند ، انجام دهد.

اجرای برنامه FastAPI

برنامه FastAPI را با استفاده از آن اجرا کنید uvicorn:

uvicorn main:app --reload
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

وقتی به سمت http://127.0.0.1:8000/data در مرورگر خود ، پاسخ شبیه سازی شده را پس از تأخیر کوتاه مشاهده خواهید کرد. FastAPI در زمان انتظار برای پرس و جو جعلی DB ، سایر درخواست های دریافتی را به طور مؤثر انجام می دهد.

async و در انتظار Fastapi

Fastapi از پایتون استفاده می کند async/await نحو برای تعریف نقاط پایانی ناهمزمان. در async def کلمه کلیدی نشان می دهد که کنترل کننده مسیر ناهمزمان است ، در حالی که await قبل از ادامه کار برای پایان دادن به یک عملیات async استفاده می شود.

در اینجا یک شکست سریع وجود دارد:

  • async def: یک عملکرد ناهمزمان را اعلام می کند.
  • منتظر بودن: به حلقه رویداد می گوید مکث کرده و منتظر نتیجه یک عملیات ASYNC (به عنوان مثال ، یک پرس و جو بانک اطلاعاتی ، یک درخواست HTTP) باشید.

با استفاده از بانکهای اطلاعاتی ناهمزمان

یکی از موارد اصلی استفاده برای برنامه نویسی ناهمزمان ، تعامل با پایگاه داده ها است. با استفاده از یک کانکتور پایگاه داده ناهمزمان ، برنامه شما می تواند بسیاری از نمایش داده های پایگاه داده را به طور همزمان بدون مسدود کردن سرور اداره کند.

بیایید نمونه ای را با استفاده از یک کتابخانه پایگاه داده ناهمزمان مشاهده کنیم ، databases:

pip install databases
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

import databases
import sqlalchemy
from fastapi import FastAPI

DATABASE_URL = "sqlite+aiosqlite:///./test.db"

database = databases.Database(DATABASE_URL)
metadata = sqlalchemy.MetaData()

# Define a table
user_table = sqlalchemy.Table(
    "users",
    metadata,
    sqlalchemy.Column("id", sqlalchemy.Integer, primary_key=True),
    sqlalchemy.Column("name", sqlalchemy.String),
)

app = FastAPI()

@app.on_event("startup")
async def startup():
    await database.connect()

@app.on_event("shutdown")
async def shutdown():
    await database.disconnect()

@app.get("/users")
async def get_users():
    query = user_table.select()
    result = await database.fetch_all(query)
    return result
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

در اینجا ، ما از databases کتابخانه ، که از نمایش داده های پایگاه داده ناهمزمان پشتیبانی می کند. در get_users مسیر داده ها را به صورت غیر همزمان از پایگاه داده می گیرد و به FastAPI اجازه می دهد تا در حالی که منتظر نتیجه هستند ، پردازش سایر درخواست ها را ادامه دهد.

رسیدگی به همزمانی در Fastapi

fastapi در بالای ساخته شده است ستاره، یک چارچوب ASGI که ​​از همزمانی از طریق پایتون پشتیبانی می کند asyncio حلقه رویداد. این بدان معنی است که FastAPI می تواند چندین درخواست را به طور همزمان انجام دهد ، و این امر را برای کارهای محدود به I/O بسیار کارآمد می کند.

به عنوان مثال ، هنگامی که چندین مشتری به /data نقطه پایانی در مثال قبلی ، FastAPI به دلیل رفتار غیر مسدود کننده می تواند آنها را همزمان پردازش کند. با این حال ، یادآوری این نکته ضروری است که برنامه نویسی ناهمزمان از وظایف I/O محدود می شود. وظایف محدود به CPU (به عنوان مثال ، محاسبات سنگین) ممکن است به همان میزان سودمند نباشد async/awaitبشر

بهترین روشها برای برنامه نویسی ناهمزمان با FastAPI

  1. از مسدود کردن I/O خودداری کنید: هنگام نوشتن کد ناهمزمان ، اطمینان حاصل کنید که عملیاتی که ممکن است مسدود شود (مانند محاسبات طولانی) به صورت ناهمزمان یا در موضوعات جداگانه انجام می شود.

  2. از درایورهای پایگاه داده Async استفاده کنید: از اتصالات پایگاه داده Async استفاده کنید (مانند databasesبا asyncpg، یا aiomysql) برای استفاده کامل از برنامه نویسی ناهمزمان هنگام تعامل با پایگاه داده خود استفاده کنید.

  3. کارهای طولانی مدت را محدود کنید: اگر نیاز به انجام کارهای طولانی مدت (به عنوان مثال ، محاسبات سنگین) دارید ، بارگذاری آنها را در کارهای پس زمینه یا استفاده از فرآیندهای جداگانه کارگران در نظر بگیرید.

  4. آزمایش مسیرهای ناهمزمان: FastAPI ابزارهای عالی برای آزمایش مسیرهای ناهمزمان با pytest وت httpxبشر حتماً تست هایی بنویسید تا تأیید کنید که مسیرهای Async شما مطابق آنچه انتظار می رود رفتار می کنند.

افکار نهایی

برنامه نویسی ناهمزمان در FastAPI ابزاری قدرتمند برای ساخت API های کارآمد و مقیاس پذیر است. با استفاده از async وت await، FastAPI به شما امکان می دهد بسیاری از درخواست ها را به طور همزمان انجام داده و عملیات I/O غیر مسدود کننده را انجام دهید. این امر باعث می شود که برای ایجاد برنامه های وب با کارایی بالا که با پایگاه داده ها ، خدمات خارجی یا انجام کارهای وقت گیر در تعامل هستند ، ایده آل شود.

با پیروی از بهترین شیوه ها و استفاده از قابلیت های Async FastAPI ، می توانید عملکرد و مقیاس پذیری API خود را به میزان قابل توجهی بهبود بخشید و از یک تجربه کاربر صاف و پاسخگو اطمینان حاصل کنید.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا