我想在异步工作时使用FastAPI和aio-pika创建一个REST服务。对于其他异步数据库驱动程序,我可以在启动时创建客户端,当它们进入路由处理程序时。例如,对于引擎,我会声明简单的连接管理器:
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
然后添加几个处理程序:
app.add_event_handler("startup", connect_to_mongo)
app.add_event_handler("shutdown", close_mongo_connection)
然后只需使用get_mongo_client
将其发送给我的处理程序。
这里的问题是aio-pika
需要asyncio
循环才能运行。下面是文档中的一个示例:
connection = await aio_pika.connect_robust(
"amqp://guest:guest@127.0.0.1/", loop=loop
)
有了FastAPI,我就没有异步循环了。有没有办法将它与示例中的接口一起使用?我是否可以使用asyncio.get_event_loop()
创建新的循环并将其传递给connect_robust
,而不在任何地方使用它?如下所示:
connection = await aio_pika.connect_robust(
"amqp://guest:guest@127.0.0.1/", loop=asyncio.get_event_loop()
)
发布于 2020-04-28 00:04:11
好的,那么,根据docs,我可以使用connect
而不是connect_robust
connection = await aio_pika.connect(
"amqp://guest:guest@127.0.0.1/"
)
https://stackoverflow.com/questions/61461567
复制相似问题