[파이썬] Flask에서의 예약된 작업 실행

Flask는 파이썬으로 작성된 마이크로 웹 프레임워크로서, 웹 애플리케이션을 쉽게 개발할 수 있게 도와줍니다. Flask는 자체적으로 예약된 작업을 실행하는 기능을 제공하지는 않지만, 별도의 라이브러리를 사용하여 예약된 작업을 실행할 수 있습니다. 이 글에서는 Python에서 Flask 애플리케이션에서 예약된 작업을 실행하는 방법을 알아보겠습니다.

Celery를 사용한 예약된 작업 실행

Celery는 Python에서 분산 작업 큐를 처리할 수 있는 라이브러리입니다. Celery를 사용하면 Flask 애플리케이션 내에서 예약된 작업을 실행할 수 있습니다. 다음은 Flask와 Celery를 함께 사용하여 예약된 작업을 처리하는 예제 코드입니다.

from flask import Flask
from celery import Celery

app = Flask(__name__)

# Celery 설정
app.config['CELERY_BROKER_URL'] = 'redis://localhost:6379/0'
app.config['CELERY_RESULT_BACKEND'] = 'redis://localhost:6379/0'

# Celery 인스턴스 생성
celery = Celery(app.name, broker=app.config['CELERY_BROKER_URL'])
celery.conf.update(app.config)

# 예약된 작업 정의
@celery.task
def perform_task():
    # 예약된 작업 로직 작성
    print("예약된 작업을 실행합니다.")

# Flask 애플리케이션 라우트 예제
@app.route('/execute_task')
def execute_task():
    # 예약된 작업 실행
    perform_task.delay()
    return "예약된 작업이 실행되었습니다."

if __name__ == '__main__':
    app.run()

위의 예제 코드에서는 Flask 애플리케이션과 Celery를 함께 사용하여 예약된 작업을 실행합니다. perform_task라는 예약된 작업은 @celery.task 데코레이터를 사용하여 정의되었습니다. 이 작업은 Flask 애플리케이션의 /execute_task 라우트에서 실행됩니다. perform_task.delay()를 호출하여 예약된 작업을 실행합니다.

Celery를 사용하여 예약된 작업을 실행하려면 Celery Worker와 Redis 서버를 실행해야 합니다. Celery Worker는 예약된 작업을 실행하는 프로세스입니다. Redis는 작업 큐와 결과를 저장하기 위한 인메모리 데이터베이스입니다. 아래 명령을 통해 Celery Worker와 Redis를 실행할 수 있습니다.

celery -A [파일명]:[Celery 인스턴스 변수명] worker --loglevel=info

위 예제 코드에서는 Redis의 주소를 redis://localhost:6379/0로 설정했으므로, Redis가 로컬에서 실행되고 6379 포트를 사용하고 있다고 가정합니다.

APScheduler를 사용한 예약된 작업 실행

APScheduler는 파이썬에서 예약된 작업을 실행하기 위한 라이브러리입니다. 다음은 Flask 애플리케이션에서 APScheduler를 사용하여 예약된 작업을 실행하는 예제 코드입니다.

from datetime import datetime
from flask import Flask
from apscheduler.schedulers.background import BackgroundScheduler

app = Flask(__name__)

# 예약된 작업 함수
def perform_task():
    # 예약된 작업 로직 작성
    print("예약된 작업을 실행합니다.")

# Flask 애플리케이션 라우트 예제
@app.route('/execute_task')
def execute_task():
    # 예약된 작업 실행
    scheduler = BackgroundScheduler()
    scheduler.add_job(perform_task, 'interval', minutes=1)
    scheduler.start()
    return "예약된 작업이 실행되었습니다."

if __name__ == '__main__':
    app.run()

위의 예제 코드에서는 perform_task()라는 예약된 작업 함수를 정의하고, /execute_task 라우트에서 예약된 작업을 실행합니다. BackgroundScheduler를 사용하여 APScheduler를 초기화하고, scheduler.add_job()을 사용하여 예약된 작업을 추가합니다. 위 예제에서는 작업이 1분마다 실행되도록 설정했습니다.

APScheduler를 사용하여 예약된 작업을 실행하려면 APScheduler 백그라운드 프로세스를 실행해야 합니다. Flask 애플리케이션을 실행하기 전에 다음 명령을 통해 APScheduler 백그라운드 프로세스를 실행할 수 있습니다.

python [파일명].py

위의 예제 코드에서는 예약된 작업이 /execute_task 라우트를 통해 실행되며, 백그라운드에서 실행되므로 서버를 실행 중인 동안에도 예약된 작업이 실행됩니다.

결론

Flask에서 예약된 작업을 실행하기 위해서는 별도의 라이브러리를 사용해야 합니다. Celery와 APScheduler는 Flask 애플리케이션에서 예약된 작업을 처리하는 데 사용할 수 있는 라이브러리 중 일부입니다. 이러한 라이브러리를 사용하여 예약된 작업을 실행하고, Flask 애플리케이션 내에서 비동기적으로 작업을 처리할 수 있습니다.