Flask로 Batch Scheduler를 구현하는 방법입니다.
Flask 란 ?
Flask는 파이썬으로 작성된 경량 웹 프레임워크입니다. 웹 애플리케이션을 빠르게 개발하고 구축할 수 있도록 설계되었습니다. Request-Response 모델을 따르며, URL 라우팅, 템플릿 엔진, 세션 관리 및 다양한 확장을 제공합니다.
결국 RestfulAPI 구현하기 위해 자주 사용하는 프레임 워크입니다.
[목차]
1. Batch Scheduler 설명, 구현 방법 소개
2. flask , Batch Scheduler 분리 구현
3. flask , Batch Scheduler 통합 구현
1. Batch Scheduler 설명
Batch Scheduler 란 ?
Batch Scheduler는 정기적으로 실행해야 하는 작업을 예약하고 실행하는 시스템 또는 도구를 의미합니다.
일괄 처리 작업은 백그라운드에서 자동으로 실행되며, 주기적으로 데이터 처리, 백업, 정기적인 작업 등을 수행하는 데 사용됩니다. 일괄 처리 스케줄러는 주어진 일정 또는 조건에 따라 작업을 실행하고, 실행된 결과를 모니터링하거나 기록할 수 있습니다.
예를 들어,
- 1시간 마다 나의 이메일을 검사하고 첨부파일을 다운로드 받아 정리해주는 프로그램
- 오후 5시면 한국 주식 데이터를 조회하여 그날의 마켓 현황을 정해진 룰로 정리해주는 프로그램 등등
이런 것들을 수행하는 서비스를 가리킵니다.
2. flask , Batch Scheduler 분리 구현
여기서 Flask 에서 Batch Scheduler 를 구현 한다는 것은 다음을 의미 합니다.
Flask app 서버가 실시간으로 떠있는 상황에서 특정 Batch 가 돌아야하는지 계속 관리해주는 영역도 같이 떠있는 것을 의미합니다. 그렇다고해서 두 서비스가 통합되어 있어야 하는 것을 의미 하는 것은 아닙니다.
from flask import Flask
app = Flask(__name)
@app.route('/')
def hello():
return "Hello, World!"
if __name__ == '__main__':
app.run()
from apscheduler.schedulers.blocking import BlockingScheduler
def scheduled_task():
print("Scheduled task is running...")
scheduler = BlockingScheduler()
scheduler.add_job(scheduled_task, 'interval', seconds=60)
scheduler.start()
이렇게 하면 Flask 서버와 스케줄러가 분리되고, 스케줄된 작업은 별도의 백그라운드 프로세스에서 실행됩니다.
3. flask, batch scheduler 통합 구현
통합 구현 방식은 간단한 설정과 통합 용이성으로 유용한 면이 있습니다.
Flask 앱 내에서 스케줄러를 설정하고 실행하는 것은 상대적으로 간단하며 Flask 앱의 구조를 유지하고 모듈화하기 쉽습니다. 스케줄링된 작업과 Flask 앱의 다른 구성 요소 사이에 데이터 및 로직을 쉽게 공유할 수 있으며, Flask 앱과 스케줄러가 함께 가동됩니다.
하지만 싱글 프로세스 구현으로 서로 영향을 줍니다. 확장성도 낮습니다. 개별영역의 확장이 필요할때 같이 통합 확장을 고민해야합니다. 그리고 복잡성도 늘어날 수 있습니다.
사용하는 python package는 apscheduler 입니다.
* from apscheduler.schedulers.background import BackgroundScheduler
위 내용을 app 실행 코드 app.py 또는 __init__.py 최상단에 입력합니다.
from flask import Flask
from apscheduler.schedulers.background import BackgroundScheduler
def scheduled_task():
print("Scheduled task is running...")
def create_app(debug=False):
# ...
app.Flask(__name__)
cors= CORS(app)
scheduler = BackgroundScheduler()
scheduler.add_job(scheduled_task, 'interval', seconds=60) # 매 60초마다 실행
scheduler.start()
return app
if __name__ == '__main__':
app = create_app('development')
app.run()
interval 외에도 다음처럼 cron 으로 구현도 가능합니다.
만약 분리 구현할 경우, batch 에서 수행하는 서비스가 flask 서버내에서 수행해야한다면 batch에서 flask 로 요청할 수 있는 구조도 개발을 해야합니다. 따라서 각 구현 방식 중 어느 방식이 좋을 지는 충분히 고민해보고 진행하는 것이 좋겠습니다.
PS : apscheduler 라이브러리 외에도 다른 라이브러리가 많습니다. Celery, rq-scheduler 도 있습니다.
해당 라이브러리가 어떻게 다른지는 다른 포스트에서 설명을 하겠습니다.
감사합니다.
'정리 > 구현' 카테고리의 다른 글
R에서 mail 보내기 (ubuntu) (0) | 2018.04.06 |
---|---|
예제로 이해하는 함수 포인터 (0) | 2015.11.06 |
ubuntu 14.04 korean language (0) | 2015.10.08 |
빠르게! grep 사용법 이해하기 (0) | 2015.08.28 |
c 프로그래밍을 위한 vi 환경 설정 & 리눅스 gcc 컴파일 용어 (0) | 2015.07.25 |