[python] FastAPI에서 멀티스레딩 처리하기

FastAPI는 빠른 속도와 간편한 개발을 제공하는 웹 프레임워크입니다. 비동기 처리를 지원하며, 이를 통해 더 많은 요청을 처리할 수 있습니다. 하지만 때로는 CPU 작업이 많은 상황에서 멀티스레딩을 통해 성능을 향상시키고 싶을 수 있습니다. 이번 블로그에서는 FastAPI에서 멀티스레딩 처리하는 방법에 대해 알아보겠습니다.

멀티스레딩을 사용하는 이유

FastAPI의 기본 동작은 단일 스레드에서 요청을 처리하는 것입니다. 이는 대부분의 상황에서 충분하지만, CPU 작업이 많거나 오랜 시간이 걸리는 작업에 대해서는 성능 저하를 경험할 수 있습니다. 이때 멀티스레딩을 사용하면 여러 작업을 병렬로 처리하여 성능을 향상시킬 수 있습니다.

멀티스레딩 처리 방법

FastAPI에서 멀티스레딩을 처리하기 위해 concurrent.futures 라이브러리를 사용할 수 있습니다. 이 라이브러리는 스레드 풀을 제공하여 병렬 작업을 처리할 수 있습니다.

아래는 멀티스레딩을 사용하여 간단한 예제를 작성한 코드입니다.

from fastapi import FastAPI
import concurrent.futures

app = FastAPI()

@app.get("/")
def root():
    # 스레드 풀 생성
    executor = concurrent.futures.ThreadPoolExecutor()
  
    # 작업 함수 정의
    def work():
        # 복잡한 작업 수행
        return "Hello World!"

    # 작업 실행
    result = executor.submit(work)

    # 결과 반환
    return result.result()

위의 예제에서는 FastAPI 애플리케이션을 생성하고, / 경로로 요청이 들어오면 멀티스레딩을 통해 작업을 처리하는 코드를 작성했습니다. executor.submit() 함수를 통해 작업을 제출하고 결과를 반환합니다.

주의사항

멀티스레딩을 사용할 때 주의해야 할 몇 가지 사항이 있습니다.

  1. FastAPI에서는 응답을 직접 반환해야 합니다. 작업이 완료된 후 반환하는 것이 아닌, 작업을 제출한 후 응답을 즉시 반환해야 합니다.
  2. 멀티스레딩을 사용하게 되면 오류 처리가 복잡해질 수 있습니다. 작업 내에서 발생하는 오류를 적절히 처리해야 합니다.
  3. 멀티스레딩은 CPU 작업에 주로 사용됩니다. I/O 작업에는 비동기 처리를 사용하는 것이 더 효율적일 수 있습니다.

결론

FastAPI에서 멀티스레딩을 사용하여 성능을 향상시킬 수 있습니다. concurrent.futures 라이브러리를 사용하여 간편하게 작업을 병렬로 처리할 수 있습니다. 그러나 멀티스레딩을 사용할 때 주의사항을 명심해야 하며, 적절한 상황에서 사용해야 합니다. FastAPI의 비동기 처리와 멀티스레딩을 적절히 조합하여 웹 애플리케이션의 성능을 향상시킬 수 있습니다.


참고 자료: