[python] Flask-RESTful에서 특정 시간 내에 작업을 실행하는 방법

Flask-RESTful은 Flask 웹 프레임워크의 확장이며, RESTful API를 구축하기 위한 도구입니다. 특정 시간 내에 작업을 실행해야 하는 경우, Flask-RESTful에서는 몇 가지 옵션이 제공됩니다. 이 게시물에서는 Flask-RESTful에서 특정 시간 내에 작업을 실행하는 방법을 알아보겠습니다.

1. Background 작업

Flask-RESTful에서 특정 시간 내에 작업을 실행하는 가장 일반적인 방법은 백그라운드 작업을 사용하는 것입니다. Flask-RESTful 애플리케이션에 백그라운드 작업을 추가하기 위해서는 다음과 같은 단계를 따릅니다.

1.1. Background 작업을 위한 라이브러리 설치

먼저, Flask-RESTful 애플리케이션에서 백그라운드 작업을 지원하는 라이브러리를 설치해야 합니다. 대표적인 백그라운드 작업 라이브러리로는 Celeryrq가 있습니다.

pip install celery rq

1.2. Celery를 통한 Background 작업 설정

Celery를 사용하려면 다음과 같은 단계를 따라야 합니다.

1.2.1. Celery worker 생성

먼저, Celery worker를 생성해야 합니다. 이를 위해 프로젝트의 루트 디렉토리에 worker.py 파일을 생성하고 다음과 같은 코드를 작성합니다.

from celery import Celery

app = Celery('myapp', broker='redis://localhost:6379/0')

@app.task
def my_task(arg1, arg2):
    # 작업할 내용을 여기에 작성합니다.
    pass

1.2.2. Flask-RESTful 애플리케이션과 Celery 연결

Flask-RESTful 애플리케이션과 Celery를 연결해야 합니다. app.py 파일에 다음 코드를 추가합니다.

from flask import Flask
from your_package.worker import app as celery_app

app = Flask(__name__)
app.config['CELERY_BROKER_URL'] = 'redis://localhost:6379/0'
app.config['CELERY_RESULT_BACKEND'] = 'redis://localhost:6379/0'

celery_app.conf.update(app.config)

1.3. 백그라운드 작업 배치

이제 Flask-RESTful 애플리케이션에서 백그라운드 작업을 배치하는 코드를 작성할 수 있습니다. 예를 들어, 특정 시간에 my_task를 실행하려면 다음과 같은 코드를 사용합니다.

from datetime import datetime, timedelta
from your_package.worker import my_task

# 특정 시간 계산
now = datetime.now()
scheduled_time = now + timedelta(minutes=30)

# 작업 작업 큐에 추가
my_task.apply_async(args=[arg1, arg2], eta=scheduled_time)

위의 예제에서는 datetime 모듈을 사용하여 현재 시간에서 30분 후의 시간을 계산하고, apply_async 메서드를 사용하여 작업을 작업 큐에 추가합니다.


위의 예제는 Celery를 사용하여 Flask-RESTful에서 백그라운드 작업을 실행하는 방법을 보여줍니다. 다른 백그라운드 작업 라이브러리를 사용할 때는 해당 라이브러리의 문서를 참조하여 작업을 설정하고 사용해야 합니다.

참고 자료: