
實(shí)測:阿里云百煉上線「全周期 MCP 服務(wù)」,AI 工具一站式托管
import asyncio
app = FastAPI()
@app.get("/async-example")
async def async_example():
await asyncio.sleep(2) # Simulate an I/O operation
return {"message": "This endpoint is asynchronous!"}
在此示例中:
async_example
被定義為使用 的異步函數(shù)async def
。await asyncio.sleep(2)
模擬阻塞 I/O 操作,這不會阻止服務(wù)器處理其他請求。這意味著當(dāng)服務(wù)器等待asyncio.sleep(2)
完成時,它可以處理其他傳入的請求。
在 FastAPI 應(yīng)用程序中訪問數(shù)據(jù)庫時,建議使用異步數(shù)據(jù)庫驅(qū)動程序以避免阻塞操作。以下是如何使用 FastAPI 設(shè)置異步數(shù)據(jù)庫查詢的示例。
from fastapi import FastAPI
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
from sqlalchemy.orm import sessionmaker
# Setup database connection
DATABASE_URL = "postgresql+asyncpg://user:password@localhost/dbname"
engine = create_async_engine(DATABASE_URL, echo=True)
async_session = sessionmaker(engine, class_=AsyncSession, expire_on_commit=False)
app = FastAPI()
@app.get("/items/")
async def get_items():
async with async_session() as session:
result = await session.execute("SELECT * FROM items")
items = result.fetchall()
return {"items": items}
在此設(shè)置中:
create_async_engine
fromsqlalchemy.ext.asyncio
進(jìn)行異步數(shù)據(jù)庫連接。async with
,當(dāng)函數(shù)遇到任何阻塞操作時,允許它放棄控制。對于不需要立即響應(yīng)客戶端的操作(例如發(fā)送電子郵件或處理大量數(shù)據(jù)),F(xiàn)astAPI 提供了一項BackgroundTasks
功能。這允許您在向用戶發(fā)送響應(yīng)后卸載要運(yùn)行的任務(wù)。
from fastapi import FastAPI, BackgroundTasks
app = FastAPI()
def write_log(message: str):
with open("log.txt", "a") as log:
log.write(message + "\n")
@app.post("/send-notification/")
async def send_notification(email: str, background_tasks: BackgroundTasks):
background_tasks.add_task(write_log, f"Notification sent to {email}")
return {"message": f"Notification scheduled for {email}"}
在此示例中:
write_log
是一個記錄消息的同步函數(shù)。BackgroundTasks
,該任務(wù)被添加到隊列并在后臺處理,從而允許端點(diǎn)立即響應(yīng)。您可以通過模擬對端點(diǎn)的多個請求來測試異步編程的有效性。使用Locust
或等工具ApacheBench
來測量所用時間,并觀察您的 API 如何通過異步操作處理并發(fā)請求。
借助異步編程,F(xiàn)astAPI 可讓您構(gòu)建能夠高效處理多個請求的 API。通過使用async
和await
語法,您可以優(yōu)化性能、縮短響應(yīng)時間并創(chuàng)造更流暢的用戶體驗。無論您處理數(shù)據(jù)庫操作還是后臺任務(wù),F(xiàn)astAPI 的異步功能都使其成為現(xiàn)代 Web 應(yīng)用程序的強(qiáng)大工具。
使用 FastAPI 進(jìn)行異步編程可讓您構(gòu)建高性能應(yīng)用程序。掌握此功能,并通過高效、響應(yīng)迅速的 API 將您的 FastAPI 項目提升到新的水平。