[python] Flask-RESTful에서 멀티스레딩 및 멀티프로세싱 처리 방법

Flask-RESTful은 파이썬 기반의 웹 프레임워크인 Flask를 확장한 라이브러리로, RESTful API를 쉽게 개발할 수 있게 해줍니다. 이 라이브러리를 사용하여 멀티스레딩 및 멀티프로세싱을 처리할 수 있습니다.

멀티스레딩 처리

Threaded 옵션을 이용하여 Flask-RESTful 애플리케이션을 멀티스레드로 처리할 수 있습니다. 이를 사용하면 다수의 클라이언트 요청을 동시에 처리할 수 있습니다.

from flask import Flask
from flask_restful import Api
from werkzeug.serving import WSGIRequestHandler

app = Flask(__name__)
api = Api(app)

app.config["PROPAGATE_EXCEPTIONS"] = True

# 멀티스레딩 옵션 활성화
app.run(threaded=True)

class MyResource(Resource):
    def get(self):
        # 작업 처리
        return {'message': 'success'}

api.add_resource(MyResource, '/my-resource')

if __name__ == "__main__":
    app.run()

위 코드에서 app.run(threaded=True)를 사용하여 멀티스레딩을 활성화합니다. 이렇게 할 경우 여러 클라이언트의 요청을 동시에 처리할 수 있습니다.

멀티프로세싱 처리

Flask-RESTful은 멀티프로세싱을 지원하지 않기 때문에, 별도의 라이브러리를 사용해야 합니다. 이를 위해 Gunicorn이라는 WSGI HTTP 서버를 사용하여 멀티프로세싱을 처리할 수 있습니다.

먼저, Gunicorn을 설치합니다.

pip install gunicorn

그리고 다음과 같이 Gunicorn 명령어를 사용하여 Flask-RESTful 애플리케이션을 실행합니다.

gunicorn app:app --workers 4

위 예제에서 --workers 옵션을 사용하여 작업자(worker)의 수를 지정할 수 있습니다. 이를 통해 병렬로 처리할 수 있는 요청의 수를 결정할 수 있습니다.

결론

Flask-RESTful을 사용하면 멀티스레딩과 멀티프로세싱을 쉽게 처리할 수 있습니다. 멀티스레딩은 app.run(threaded=True) 옵션을 사용하여 활성화하고, 멀티프로세싱은 Gunicorn과 같은 별도의 라이브러리를 사용하여 처리할 수 있습니다. 이를 통해 Flask-RESTful 애플리케이션의 성능과 처리 속도를 향상시킬 수 있습니다.

참고 자료