首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在FastAPI中使用aio-pika?

如何在FastAPI中使用aio-pika?
EN

Stack Overflow用户
提问于 2020-04-27 22:47:16
回答 1查看 2.1K关注 0票数 1

我想在异步工作时使用FastAPI和aio-pika创建一个REST服务。对于其他异步数据库驱动程序,我可以在启动时创建客户端,当它们进入路由处理程序时。例如,对于引擎,我会声明简单的连接管理器:

代码语言:javascript
运行
复制
from motor.motor_asyncio import AsyncIOMotorClient


class Database:
    client: AsyncIOMotorClient = None


db = Database()


async def connect_to_mongo():
    db.client = AsyncIOMotorClient("mongo:27017")


async def close_mongo_connection():
    db.client.close()


async def get_mongo_client() -> AsyncIOMotorClient:
    return db.client

然后添加几个处理程序:

代码语言:javascript
运行
复制
app.add_event_handler("startup", connect_to_mongo)
app.add_event_handler("shutdown", close_mongo_connection)

然后只需使用get_mongo_client将其发送给我的处理程序。

这里的问题是aio-pika需要asyncio循环才能运行。下面是文档中的一个示例:

代码语言:javascript
运行
复制
connection = await aio_pika.connect_robust(
        "amqp://guest:guest@127.0.0.1/", loop=loop
    )

有了FastAPI,我就没有异步循环了。有没有办法将它与示例中的接口一起使用?我是否可以使用asyncio.get_event_loop()创建新的循环并将其传递给connect_robust,而不在任何地方使用它?如下所示:

代码语言:javascript
运行
复制
connection = await aio_pika.connect_robust(
            "amqp://guest:guest@127.0.0.1/", loop=asyncio.get_event_loop()
        )
EN

回答 1

Stack Overflow用户

发布于 2020-04-28 00:04:11

好的,那么,根据docs,我可以使用connect而不是connect_robust

代码语言:javascript
运行
复制
connection = await aio_pika.connect(
        "amqp://guest:guest@127.0.0.1/"
    )
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61461567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档