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

مقدمه
در توسعه وب مدرن ، ساخت API های مقیاس پذیر و کارآمد ضروری است. در حالی که API های همزمان سنتی به خوبی به ما خدمت کرده اند ، آنها می توانند هنگام برخورد با همزمانی بالا یا عملیات طولانی مدت ، به یک تنگنا تبدیل شوند. وارد کردن برنامه نویسی ناهمزمان، ابزاری قدرتمند که به شما امکان می دهد عملیات غیر مسدود کننده را انجام داده و همزمان درخواست های بسیاری را انجام دهید.
Fastapi ، یک چارچوب وب مدرن پایتون ، پشتیبانی بومی را برای برنامه نویسی ناهمزمان فراهم می کند و آن را به یک انتخاب خارق العاده برای ساختن API های با کارایی بالا تبدیل می کند. در این پست وبلاگ ، ما بررسی خواهیم کرد که چگونه برنامه نویسی ناهمزمان در FastAPI کار می کند و چرا برای API های کارآمد در ساختمان بسیار مهم است.
برنامه نویسی ناهمزمان چیست؟
برنامه نویسی ناهمزمان کد شما را قادر می سازد تا کارهایی مانند عملیات I/O (به عنوان مثال ، نمایش داده های پایگاه داده ، خواندن پرونده یا تماس های شبکه) انجام دهد بدون اینکه موضوع اصلی اجرای را مسدود کند. در یک برنامه همزمان سنتی ، هر عملیات I/O نخ را تا زمان تکمیل مسدود می کند. با این حال ، در برنامه نویسی ناهمزمان ، این عملیات “در پس زمینه” انجام می شود و به برنامه اجازه می دهد پردازش سایر کارهای را بدون انتظار ادامه دهد.
چرا از برنامه نویسی ناهمزمان در Fastapi استفاده می کنیم؟
-
همزمانی: برنامه نویسی ناهمزمان اجازه می دهد تا چندین کار I/O را به طور همزمان انجام دهید بدون اینکه منتظر بمانید تا هرکدام قبل از شروع کار بعدی به پایان برسند. این امر به ویژه برای برنامه هایی که بسیاری از درخواست های API را به طور همزمان انجام می دهند مفید است.
-
عملیات غیر مسدود کننده: با کد ASYNC ، API شما می تواند بدون کند کردن کل فرآیند با پایگاه داده ها ، خدمات خارجی یا پرونده ها در تعامل باشد.
-
تقویت عملکرد: 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
-
از مسدود کردن I/O خودداری کنید: هنگام نوشتن کد ناهمزمان ، اطمینان حاصل کنید که عملیاتی که ممکن است مسدود شود (مانند محاسبات طولانی) به صورت ناهمزمان یا در موضوعات جداگانه انجام می شود.
-
از درایورهای پایگاه داده Async استفاده کنید: از اتصالات پایگاه داده Async استفاده کنید (مانند
databases
باasyncpg
، یاaiomysql
) برای استفاده کامل از برنامه نویسی ناهمزمان هنگام تعامل با پایگاه داده خود استفاده کنید. -
کارهای طولانی مدت را محدود کنید: اگر نیاز به انجام کارهای طولانی مدت (به عنوان مثال ، محاسبات سنگین) دارید ، بارگذاری آنها را در کارهای پس زمینه یا استفاده از فرآیندهای جداگانه کارگران در نظر بگیرید.
-
آزمایش مسیرهای ناهمزمان: FastAPI ابزارهای عالی برای آزمایش مسیرهای ناهمزمان با
pytest
وتhttpx
بشر حتماً تست هایی بنویسید تا تأیید کنید که مسیرهای Async شما مطابق آنچه انتظار می رود رفتار می کنند.
افکار نهایی
برنامه نویسی ناهمزمان در FastAPI ابزاری قدرتمند برای ساخت API های کارآمد و مقیاس پذیر است. با استفاده از async
وت await
، FastAPI به شما امکان می دهد بسیاری از درخواست ها را به طور همزمان انجام داده و عملیات I/O غیر مسدود کننده را انجام دهید. این امر باعث می شود که برای ایجاد برنامه های وب با کارایی بالا که با پایگاه داده ها ، خدمات خارجی یا انجام کارهای وقت گیر در تعامل هستند ، ایده آل شود.
با پیروی از بهترین شیوه ها و استفاده از قابلیت های Async FastAPI ، می توانید عملکرد و مقیاس پذیری API خود را به میزان قابل توجهی بهبود بخشید و از یک تجربه کاربر صاف و پاسخگو اطمینان حاصل کنید.