끄적끄적 코딩일지

[python] APScheduler 사용하기 본문

Python

[python] APScheduler 사용하기

BaekGyuHyeon 2022. 5. 10. 22:57

크롤링을 사용하여 데이터를 긁어오다가

정기적으로 데이터를 업데이트 해주어야 하는 문제가 생겼다.

어떻게 정기적 이라는 조건을 해결할까 생각해 보다가

예전 spring을 공부할때 scheduler개념이 생각났다.

 

혹시 flask에서도 scheduler을 실행시킬수 있지 않을까 찾아보니....

오! 있다!!

 

무려 scheduler와 APScheduler 라는 라이브러리가 있단다.

 

두개의 차이점은 APScheduler는 background에서도 실행을 할수 있고

실행주기 지정을 cron, date,interval등 다양한 방식으로 실행 주기를 지정할 수 있다.

 

기왕이면 좋은게 좋다고 APScheduler 를 사용해 보도록 하자

 

일단 모듈부터 설치하고

 

pip install APScheduler

 

이어서 코드 작성

 

from apscheduler.schedulers.background import BackgroundScheduler

# deamon = True 속성을 주어 메인 프로세스가 종료되면 같이 종료되도록 함으로써
# background에서 계속 돌아가는걸 방지하도록 하자
sched = BackgroundScheduler(daemon=True)

# 매일 0시 0분 반복
@sched.scheduled_job('cron', hour='0',minuite='0',id='프로세스 id 넣을것')
def job():
	....
    
# 스케줄러 시작
sched.start()

 

그럼 추가로 cron ,date interval등 돌아가는 시간을 어떻게 지정하는지 알아보자

# 특정 시간에 반복

# 매일, 매 시 5분에 반복
@sched.scheduled_job('cron',minuite='5',id='프로세스 id 넣을것')
...
# 매일, 매 시 5분마다 반복
@sched.scheduled_job('cron',minuite='*/5',id='프로세스 id 넣을것')
...

# 매일, 1시간 마다 반복
@sched.scheduled_job('cron',hour='*/1',minuite='0' ,id='프로세스 id 넣을것')
...

 

더 자세한 사항은 아래 링크를 확인하면 볼 수 있다.

http://apscheduler.readthedocs.io/en/3.0/modules/triggers/cron.html#module-apscheduler.triggers.cron