[python] Tornado와 주기적 작업 스케줄링

Tornado는 파이썬 기반의 비동기 웹 프레임워크로, 이벤트 기반 아키텍처를 사용하여 전통적인 동기적 웹 프레임워크보다 더 높은 성능을 제공합니다. Tornado는 비동기적인 작업을 처리하는 데 강점을 가지고 있으며, 주기적인 작업을 스케줄링하기 위한 많은 옵션도 제공합니다.

주기적 작업 스케줄링을 위한 방법

Tornado에서 주기적인 작업을 스케줄링하는 가장 일반적인 방법은 PeriodicCallback을 사용하는 것입니다. PeriodicCallback은 특정 주기로 콜백 함수를 실행하는 기능을 제공합니다.

import tornado.ioloop

def my_callback():
    # 주기적으로 실행되는 작업을 수행하는 함수
    pass

# 1초마다 my_callback 함수를 실행하는 PeriodicCallback 객체 생성
callback = tornado.ioloop.PeriodicCallback(my_callback, 1000)

# Tornado IOLoop에 callback을 추가하여 스케줄링
callback.start()

# Tornado IOLoop 시작
tornado.ioloop.IOLoop.current().start()

위의 예제에서 my_callback 함수는 주기적으로 실행되어야 할 작업을 수행합니다. PeriodicCallback 생성자의 두 번째 인자는 주기를 밀리초 단위로 지정합니다. 위의 예제에서는 1초(1000ms)마다 my_callback 함수가 실행됩니다.

PeriodicCallback 객체를 start 메서드로 시작시킨 후, IOLoopstart 메서드를 호출하여 Tornado IOLoop을 시작합니다. 이렇게 하면 my_callback 함수가 지정한 주기로 주기적으로 실행됩니다.

다른 주기적 작업 스케줄링 옵션

Tornado에서는 add_timeout 메서드를 사용해 주기적인 작업을 스케줄링할 수도 있습니다. 이 메서드는 일정 시간 후에 한 번 실행되는 콜백을 추가합니다.

import time
import tornado.ioloop

def my_callback():
    # 주기적으로 실행되어야 할 작업을 수행하는 함수

    # 다시 스케줄링
    tornado.ioloop.IOLoop.current().add_timeout(time.time() + 1, my_callback)

# 최초 실행
my_callback()

# Tornado IOLoop 시작
tornado.ioloop.IOLoop.current().start()

위의 예제에서 my_callback 함수는 주기적으로 실행되어야 할 작업을 수행합니다. add_timeout 메서드를 사용하여 1초 후에 다시 my_callback 함수를 호출하여 주기적으로 작업을 스케줄링합니다.

결론

Tornado는 비동기 웹 프레임워크로, 주기적인 작업 스케줄링을 위한 강력한 도구를 제공합니다. PeriodicCallback을 이용하여 특정 주기로 콜백 함수를 실행하거나, add_timeout 메서드를 사용하여 일정 시간 후에 콜백 함수를 실행하는 방법을 소개했습니다. 이를 통해 Tornado를 활용하여 웹 애플리케이션에서 주기적인 작업을 수행할 수 있습니다.

참고 자료