Синхронный код, вызванный напрямую внутри асинхронного эндпоинта (не через систему зависимостей) - будет блокировать 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}