Задать вопрос
  • Синхронный код в асинхронном эндпоинте fastapi - блокирует ли он event loop?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Синхронный код, вызванный напрямую внутри асинхронного эндпоинта (не через систему зависимостей) - будет блокировать event loop. Если у вас есть синхронная функция, которую нужно вызвать из асинхронного эндпоинта (и она не является зависимостью fastapi), вы должны явно отправить ее на выполнение в пул потоков, например:
    from starlette.concurrency import run_in_threadpool
    import asyncio
    
    @app.get("/async-endpoint")
    async def async_endpoint():
        # starlette style (python<3.9)
        # r = await run_in_threadpool(sync_func)
        
        # asyncio style (python>=3.9)
        r = await asyncio.to_thread(sync_func)
    
        return {"data": r}
    Ответ написан
    Комментировать