Вызов asyncio.run внутри обработчика FastAPI падает с RuntimeError
def get_rate_sync(currency):
return asyncio.run(fetch_rate(currency)) # fetch_rate — async-функция
@app.get("/price")
async def price(currency: str):
rate = get_rate_sync(currency)
return {"price": 100 * rate}
Ручка падает: RuntimeError: asyncio.run() cannot be called from a running event loop. Как правильно?
- Внутри async-функции просто сделать await fetch_rate(currency)
- Создать новый event loop через asyncio.new_event_loop() и запустить в нём
- Обернуть asyncio.run в try/except и повторить вызов
- Сделать ручку обычной def — тогда asyncio.run заработает внутри FastAPI
