[python] FastAPI에서 멀티 프로세싱 처리하기

FastAPI는 강력한 웹 프레임워크로서 요청을 처리하는 데에 있어서 빠른 응답 시간을 제공합니다. 하지만 몇 가지 경우에는 단일 프로세스로는 요구 사항을 충족시키기 힘들 수 있습니다. 이러한 경우에는 멀티 프로세싱을 사용하여 성능을 향상시킬 수 있습니다.

이번 글에서는 FastAPI에서 멀티 프로세싱을 사용하는 방법에 대해 알아보겠습니다.

멀티 프로세싱 기본 개념

멀티 프로세싱은 여러 개의 프로세스를 동시에 실행하여 작업을 분산하고 성능을 향상시키는 방법입니다. 프로세스는 독립적으로 실행되는 하나의 프로그램 인스턴스이며, 각각의 프로세스는 자신의 메모리를 가지고 독립적으로 실행됩니다. 따라서 멀티 프로세싱을 통해 여러 개의 프로세스를 동시에 실행시킬 수 있으며, 병렬 처리를 통해 응답 시간을 단축시킬 수 있습니다.

FastAPI에서 멀티 프로세싱 사용하기

FastAPI에서 멀티 프로세싱을 사용하기 위해서는 concurrent.futures 모듈을 사용할 수 있습니다. 이 모듈은 멀티스레딩 및 멀티프로세싱을 지원하는 ThreadPoolExecutorProcessPoolExecutor 클래스를 제공합니다. 간단하게 말하면, ProcessPoolExecutor를 사용하여 FastAPI 애플리케이션을 멀티 프로세스로 실행시킬 수 있습니다.

from concurrent.futures import ProcessPoolExecutor
from fastapi import FastAPI

app = FastAPI()

executor = ProcessPoolExecutor()


@app.get("/process")
async def process():
    # 멀티 프로세스에서 실행될 로직
    result = await executor.submit(do_some_task)
    return {"result": result}


def do_some_task():
    # 작업 처리 로직
    return "Task completed successfully!"

위의 코드에서 ProcessPoolExecutor를 사용하여 executor를 생성한 후, submit 메서드를 사용하여 멀티 프로세스에서 실행될 로직을 제출합니다. 이후 do_some_task 함수가 멀티 프로세스로 실행되며, 결과가 반환됩니다.

위의 예제에서는 간단한 비동기 요청을 처리하기 위해 ProcessPoolExecutor를 사용했지만, 실제로는 더 복잡한 동시성 작업을 처리할 수 있습니다. 여러 개의 요청을 동시에 처리하거나, 데이터베이스나 외부 API와의 상호작용 등을 병렬로 처리할 수 있습니다.

결론

FastAPI에서 멀티 프로세싱을 사용하여 성능을 향상시킬 수 있습니다. concurrent.futures 모듈을 사용하여 ProcessPoolExecutor를 생성하고, 멀티 프로세스에서 실행될 로직을 제출함으로써 멀티 프로세싱을 구현할 수 있습니다. 이를 통해 FastAPI 애플리케이션의 응답 시간을 단축시키고, 동시성 작업을 효율적으로 처리할 수 있습니다.

참고문서: Python concurrent.futures 모듈 공식 문서