토이 프로젝트로 간단한 API 서버를 만들고 있는데, 특정 엔드포인트에서 외부 API를 호출하는 과정이 너무 느려서 고민입니다.
코드:
import time
import asyncio
from fastapi import FastAPI
app = FastAPI()
def heavy_task():
time.sleep(2)
return "Done"
@app.get("/")
async def root():
result = heavy_task()
return {"message": result}
오류: 여러 사용자가 동시에 요청을 보냈을 때, 한 명의 요청이 처리될 때까지 다른 모든 요청이 멈춰 있다가 순차적으로 응답이 오는 현상이 발생합니다.
시도: 함수 앞에 async def를 붙여보았지만, 내부의 time.sleep 때문에 여전히 전체 서버가 멈추는 것 같습니다.
질문: async 함수 내부에서 time.sleep 같은 동기식 blocking 함수를 사용하면 왜 이벤트 루프가 멈추는 것이며, 이를 어떻게 해결해야 하나요?
댓글4
-
빗방울
2026.10.30 20:09
-
빗방울
2026.10.30 23:26
맞음ㅋㅋ 그냥 def로 선언하면 FastAPI가 알아서 스레드풀로 빼주니까 그게 제일 속 편하긴 함ㅋㅋ
-
빗방울
2026.10.30 21:04
근본적으로는 time.sleep 대신 asyncio.sleep 써야 됨ㅋㅋ
비동기 함수면 내부도 다 비동기로 맞춰줘야 루프가 안 멈추는 듯요
-
빗방울
2026.10.30 21:13
외부 API 호출이면 httpx 같은 비동기 라이브러리로 바꾸는 게 제일 깔끔할 듯요 ㅋㅋ requests 쓰시는 거면 갈아타보세요.
모든 이야기1455
가벼운 안부부터 깊은 생각까지, 함께 나눠요.
총 1455개의 이야기
run_in_executor 쓰거나 그냥 함수 정의에서 async 떼보세요.
FastAPI가 알아서 외부 스레드풀로 돌려줄 거예요.
그게 훨씬 편함 ㅋㅋ