Log/Today

apscheduler를 활용한 예약 실행 성공

daco2020 2022. 1. 18. 18:05
반응형

목표 

파일에서 DB로 옮기는 코드를 장 마감 시간에 맞춰 자동 실행하기

 

 

 

문제

기존에는 파일의 데이터를 DB로 옮기기 위해서는 클라이언트에서 추가로 요청을 해야 했다. 하지만 정해진 시간에 자동으로 작업을 수행하면 요청을 따로 할 필요도 없고 실수로 누락될 일도 없겠다는 생각이 들었다.

 

 

 

행동

스케줄을 사용하기 위해 구글링을 하다 보니 while로 무한 루프를 하는 코드만 있었다. 하지만 다행스럽게도 apscheduler 라이브러리를 사용하면 while을 돌릴 필요없이 다중 스케줄을 사용할 수 있었다.

 

그리고 실제 적용해본결과 flask서버와도 함께 사용할 수 있었다. 이로써 서버 시작과 동시에 여러 스케줄들을 자동으로 수행하는 것은 물론, 클라이언트로부터 다른 요청도 받을 수 있었다. 

 

# apscheduler 설치 필요!
from apscheduler.schedulers.background import BackgroundScheduler



# ------
# 스케쥴에 등록할 함수들
def scheduler():
    Setup.start_subscribe(BidAsk)

def storage():
    filesys.insert_db()
# ------



# BackgroundScheduler을 세팅해준다
cron = BackgroundScheduler(daemon=True, timezone='Asia/Seoul')

# 스케쥴을 추가한다
cron.add_job(scheduler) # 즉시 수행
cron.add_job(storage, 'cron', hour='16', minute='5') # 4시 5분 수행

# 스케쥴을 동작시킨다
cron.start()

 

 

고민

apscheduler을 사용하기 위해 공식문서를 봤지만 매서드나 디테일한 속성들에 대해서는 결국 구글링을 해야만 했다. 문서가 친절하지 않았달까..? 앞으로 공식문서를 잘 보고 잘 써먹으려면 영어 공부를 필수로 해야겠다는 생각이 들었다.

 

 

 

앞으로

apscheduler을 사용하면 다양한 작업들을 동시다발적으로 수행할 수 있겠다는 생각이 들었다. 이 기술을 앞으로 어떤 프로젝트에 적용할 수 있을지 기대가 된다. 

 

필요에 의해 배운 기술은 다시 또다른 아이디어를 가져다주는 것 같다. 이렇게 배우다 보면 내가 할 수 있는 것들이 매우 매우 많아질 것 같다! 

 

 

 

 


 

 

 

레퍼런스

고급 파이썬 스케줄러 — AP 스케줄러 3.8.1.post1 문서 (apscheduler.readthedocs.io)

반응형