fastapi执行异步任务实例

本文介绍了一个使用FastAPI框架的简单示例,演示了如何通过异步IO库asyncio来处理后台任务,如日志记录到数据库的操作,同时确保主请求响应的高效处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

from fastapi import FastAPI
import asyncio

app = FastAPI()


async def log_to_data_base():
    await asyncio.sleep(3)
    print("log in database")


@app.get("/")
async def main():
    asyncio.create_task(log_to_data_base())
    # 创建一个新的可以调度的协程,负责向数据库写入数据
    return "返回数据"

### FastAPI 框架中的异步编程指南与示例 FastAPI 是一个现代、快速(高性能)的Web框架,用于构建API,基于Python类型提示。该框架支持异步操作,这使得开发人员可以编写高效的非阻塞代码。 #### 使用 `async` 和 `await` 为了实现异步功能,在定义路径操作函数时应使用关键字 `async def` 来声明它们为协程(coroutine),并在调用其他异步方法时使用 `await` 关键字[^3]: ```python from fastapi import FastAPI app = FastAPI() @app.get("/items/{item_id}") async def read_item(item_id: int): await some_async_function() return {"item_id": item_id} ``` 这里假设存在名为 `some_async_function()` 的异步函数来模拟实际业务逻辑处理过程。 #### 异步数据库交互 当涉及到像读取或写入这样的I/O密集型任务时,推荐采用异步驱动的数据访问库,例如 Tortoise ORM 或 SQLAlchemy 2.0+ 版本。下面是一个简单的例子展示如何利用 Motor 进行 MongoDB 数据库查询: ```python from motor.motor_asyncio import AsyncIOMotorClient from pydantic import BaseModel class Item(BaseModel): name: str description: str | None = None client = AsyncIOMotorClient('mongodb://localhost:27017') db = client.test_database @app.post('/create-item/', response_model=Item) async def create_item(item: Item): result = await db.items.insert_one(item.dict()) created_item = await db.items.find_one({'_id': result.inserted_id}) return created_item ``` 此段代码展示了创建新文档并立即检索刚插入记录的过程。 #### 并发执行多个请求 有时可能希望并发运行几个独立的任务而不必等待每一个完成后再继续下一个;这时就可以借助 Python 内置模块 asyncio 提供的功能——gather() 函数来达到目的: ```python import asyncio async def fetch_data(url): # Simulate network delay with sleep. await asyncio.sleep(1) return {'data': f'Fetched from {url}'} @app.get('/fetch-multiple/') async def fetch_multiple(): urls = ['http://example.com', 'https://another-site.org'] results = await asyncio.gather(*[fetch_data(url) for url in urls]) return results ``` 上述实例中,两个不同的URL被同时抓取数据,并最终一起返回给客户端。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值