Как использовать aio-pika с FastAPI?Python

Программы на Python
Anonymous
Как использовать aio-pika с FastAPI?

Сообщение Anonymous »

Я хочу создать службу REST с использованием FastAPI и aio-pika, работая асинхронно. Для других драйверов асинхронной базы данных я мог бы создавать клиентов при запуске, когда получаю их в обработчиках маршрутов. Например, для двигателя я бы объявил простой менеджер соединений:

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()
)


Подробнее здесь: https://stackoverflow.com/questions/614 ... th-fastapi

Вернуться в «Python»