이번 글에서는 Tornado와 Celery를 함께 사용하여 비동기 작업을 처리하는 방법에 대해 알아보겠습니다. 비동기 작업을 처리하기 위해서는 Tornado의 비동기 기능을 활용하고, Celery를 사용하여 작업을 백그라운드로 실행할 수 있습니다. 이를 통해 웹 애플리케이션의 응답 속도를 향상시킬 수 있습니다.
Tornado란?
Tornado는 파이썬으로 작성된 비동기 웹 프레임워크입니다. 비동기 요청 및 응답 처리의 성능이 뛰어나며, 기본적으로 비동기 I/O를 지원합니다. 이러한 특징으로 인해 Tornado는 대용량 트래픽을 처리해야 하는 웹 애플리케이션에 적합합니다.
Celery란?
Celery는 분산 작업 처리를 위한 비동기 작업 큐입니다. 작업을 큐에 넣은 후 워커가 이를 처리하며, 백그라운드에서 작업을 수행하므로 웹 애플리케이션의 응답 시간이 단축됩니다. Celery는 파이썬에서 주로 사용되며, 다양한 백엔드(Broker)를 지원합니다.
설정하기
먼저 Tornado와 Celery를 설치해야 합니다. 아래 명령을 사용하여 설치할 수 있습니다.
pip install tornado celery
설치가 완료되었다면, Tornado 앱과 Celery 앱을 각각 설정하겠습니다.
Tornado 앱 설정
Tornado 앱을 설정하기 위해 다음과 같이 코드를 작성합니다.
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, Tornado!")
def make_app():
return tornado.web.Application([
(r"/", MainHandler),
])
if __name__ == "__main__":
app = make_app()
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
위의 코드는 간단한 Tornado 앱을 생성하는 예시입니다. 루트 URL(“/”)로 요청이 들어오면 “Hello, Tornado!”를 응답합니다.
Celery 앱 설정
Celery 앱을 설정하기 위해 다음과 같이 코드를 작성합니다.
from celery import Celery
app = Celery('tasks', broker='amqp://guest@localhost//')
@app.task
def add(x, y):
return x + y
위의 코드는 Celery 앱을 생성하고, add
라는 태스크를 정의하는 예시입니다. 이 태스크는 받은 두 개의 인자를 더하여 결과를 반환합니다.
비동기 작업 실행하기
Tornado 앱과 Celery 앱을 설정했으므로, 이제 비동기 작업을 실행해보겠습니다.
import tornado.ioloop
import tornado.web
from celery import group
class MainHandler(tornado.web.RequestHandler):
def get(self):
# Celery 작업 생성
job = group(add.s(1, 2) for _ in range(10))
# Celery 작업 실행
result = job.apply_async()
self.write("Job ID: {}".format(result.id))
def make_app():
return tornado.web.Application([
(r"/", MainHandler),
])
if __name__ == "__main__":
app = make_app()
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
위의 코드는 Tornado 앱을 수정하여 비동기 작업을 실행하는 예시입니다. group
을 사용하여 여러 개의 add
태스크를 생성하고, 이를 Celery 작업으로 실행합니다. 작업이 완료되면 결과의 ID를 응답으로 반환합니다.
결과 확인하기
Tornado 앱을 실행한 후 웹 브라우저에서 http://localhost:8888에 접속하면 “Job ID”와 함께 작업 ID가 보여집니다. 이를 통해 작업이 비동기적으로 실행되었음을 확인할 수 있습니다.
마무리
이렇게 Tornado와 Celery를 이용하여 비동기 작업을 처리하는 방법을 알아보았습니다. Tornado의 비동기 기능과 Celery의 분산 작업 처리를 활용하면 웹 애플리케이션의 응답 속도를 향상시킬 수 있습니다. 추가적인 기능이나 세부 설정은 공식 문서를 참고하면 도움이 될 것입니다.