[python] Tornado와 멀티 프로세싱의 적용

이번 포스트에서는 Tornado 웹 서버와 멀티 프로세싱을 결합하는 방법에 대해 알아보겠습니다. Tornado는 Python으로 작성된 비동기 웹 프레임워크로, 실시간 웹 애플리케이션을 개발할 때 많이 사용됩니다. 멀티 프로세싱은 여러 개의 프로세스를 동시에 실행시켜 처리 능력을 향상시키는 방식으로, 멀티 스레딩과 달리 GIL(Global Interpreter Lock)의 제약을 받지 않기 때문에 더 많은 자원을 활용할 수 있습니다.

Tornado 멀티 프로세싱 설정

Tornado에서 멀티 프로세싱을 사용하기 위해서는 tornado.httpserver 모듈의 HTTPServer 클래스를 이용해 서버를 생성하고, tornado.ioloop 모듈의 IOLoop 클래스를 이용해 이벤트 루프를 실행해야 합니다.

import tornado.httpserver
import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, World!")

def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
    ])

if __name__ == "__main__":
    app = make_app()
    server = tornado.httpserver.HTTPServer(app)
    server.bind(8888)
    server.start(0)  # 0은 프로세스 개수, 0이면 현재 시스템에 있는 CPU 코어 개수만큼 프로세스를 생성
    tornado.ioloop.IOLoop.current().start()

위의 예제에서는 HTTPServer 클래스의 start 메소드에 0을 전달하여 현재 시스템에 있는 CPU 코어 개수만큼 프로세스를 생성하도록 설정했습니다.

멀티 프로세싱 동작 확인

위의 예제 코드를 실행하면 Tornado 웹 서버가 8888 포트에서 동작하게 됩니다. 웹 브라우저에서 http://localhost:8888로 접속하면 “Hello, World!”라는 메시지를 확인할 수 있습니다.

현재 실행 중인 Tornado 프로세스의 개수를 확인하기 위해서는 다음과 같은 명령을 사용할 수 있습니다:

$ netstat -anp | grep 8888

위의 명령을 실행하면 현재 8888 포트에서 동작하고 있는 프로세스의 개수를 확인할 수 있습니다.

결론

Tornado와 멀티 프로세싱을 함께 사용하면 웹 서버의 처리 능력을 향상시킬 수 있습니다. 이를 통해 대규모 실시간 웹 애플리케이션 개발에 효과적으로 활용할 수 있습니다. 추가로, Tornado의 비동기 웹 프레임워크 특성은 멀티 프로세싱과의 결합으로 더욱 강력한 성능을 발휘할 수 있습니다.