[파이썬] web2py에서의 태스크 큐 관리

태스크 큐(Task Queue)는 웹 애플리케이션에서 비동기적으로 수행되어야 하는 작업들을 관리하는 데 유용한 도구입니다. web2py는 간편한 태스크 큐 관리를 위한 내장된 기능을 제공합니다.

1. 태스크 큐 사용하기

web2py에서 태스크 큐를 사용하려면 tasks.py 라는 파일을 생성해야 합니다. 이 파일은 태스크 큐에서 실행될 함수들을 정의하는 곳입니다.

# tasks.py

def task_example(param1, param2):
    """
    태스크 큐에서 실행될 함수 예제
    """
    print(f"태스크 실행 - param1: {param1}, param2: {param2}")

위 예제에서는 task_example라는 함수를 정의했습니다. 이 함수는 태스크 큐에서 실행될 때 param1param2라는 매개변수를 받아 출력하는 간단한 작업을 수행합니다.

2. 태스크 큐에 작업 추가하기

태스크 큐에 작업을 추가하려면 tasks.py 파일에 정의된 함수를 호출하는 방식으로 작업을 정의해야 합니다. 이렇게 정의된 작업은 원하는 시간에 비동기적으로 실행될 수 있습니다.

# controller.py

from gluon.contrib.task_queue import TaskHopper

def add_task_to_queue():
    """
    작업을 태스크 큐에 추가하는 예제
    """
    # 태스크 큐 객체 생성
    task_hopper = TaskHopper(db=db)

    # 태스크 큐에 작업 추가
    task_hopper.add_task('task_example', args=['param1_value', 'param2_value'])

위 예제에서는 add_task_to_queue라는 함수를 정의했습니다. 이 함수에서는 TaskHopper 객체를 생성하고, add_task 메서드를 호출하여 task_example 작업을 태스크 큐에 추가합니다. 작업에 전달할 매개변수는 args 매개변수에 리스트 형태로 전달합니다.

3. 태스크 큐 실행하기

태스크 큐에 추가된 작업들은 web2py/queue.py 스크립트를 통해 실행될 수 있습니다. 이 스크립트는 웹 애플리케이션이 동작하는 동안 지속적으로 실행되어 태스크 큐에 대기하고 있는 작업들을 처리합니다.

python web2py/queue.py -Q

위 명령어를 실행하면 web2py/queue.py 스크립트가 실행되고, 태스크 큐에 추가된 작업들이 순차적으로 처리됩니다.

4. 태스크 큐 로깅 설정하기

태스크 큐 실행 시 로그를 남기기 위해서는 db.py 파일에 다음과 같이 설정해야 합니다.

# db.py

db.define_table('task_status',
                Field('task_name', 'string'),
                Field('task_args', 'string'),
                Field('status', 'string'),
                Field('result', 'text'),
                Field('created_on', 'datetime', default=request.now),
                format='%(task_name)s')

위 설정을 추가하면 태스크의 실행 상태, 결과 및 생성 시간에 대한 로그가 task_status 테이블에 저장됩니다.

마무리

web2py에서의 태스크 큐 관리는 비동기적으로 실행되어야 하는 작업들을 효율적으로 관리할 수 있는 강력한 도구입니다. 태스크 큐를 사용하면 웹 애플리케이션의 응답 시간을 개선하고 사용자 경험을 향상시킬 수 있습니다. 이를 통해 웹 개발에서의 복잡한 작업들을 보다 효율적으로 처리할 수 있습니다.