반응형
ML 파이프라인 자동화를 하면서 특정 시간에 주기적으로 돌려야하는 스케쥴러가 필요했다.
파이썬 코드로 실행을 해야해서 어떤 스케쥴러를 사용할까 찾아보다 APScheduler에 대해 찾아보게 됐다.
APScheduler (Advanced Python Scheduler)
- Python code 를 주기적으로 수행할 수 있게 도와주는 Python Library
Schedule Type
- cron : Cron 표현식으로 Python code 를 수행
- interval : 일정 주기로 Python code 를 수행
- date : 특정 날짜에 Python code 를 수행
Scheduler 종류
대표적으로
- BlockingScheduler : 단일 Job 수행시
- BackgroundScheduler : 다수 Job 수행시
APSchedule 설치
- pip install apscheduler
예시 코드
해당 코드는 BlockingScheduler를 사용했다.
add_job 함수 내부에 시간에 대한 파라미터가 들어간다.
테스트 도중 CPU 사용량이 많거나 메모리가 부족해서 정해진 시간에 작업이 진행될 수 없는 경우가 있었는데 misfire_grace_time을 60으로 설정해줌으로써 60초정도 지연시간을 두어 정상 처리될 수 있도록 했다.
import argparse
from apscheduler.jobstores.base import JobLookupError
from apscheduler.schedulers.background import BlockingScheduler
import time
from datetime import datetime, timedelta
class Scheduler:
def __init__(self):
self.sched = BlockingScheduler()
def test(self):
print(datetime.now())
def scheduler(self, args):
job_type = args.type
job_day = args.day
job_hour = args.hour
job_min = args.min
print("{type} Scheduler Start".format(type=job_type))
print(args)
if job_type == 'cron':
self.sched.add_job(self.test, job_type, day_of_week=job_day,
hour=job_hour, minute=job_min, misfire_grace_time=60)
self.sched.start()
elif job_type == 'interval':
self.sched.add_job(self.test, job_type, day_of_week=job_day,
hour=job_hour, minute=job_min, misfire_grace_time=60)
self.sched.start()
if __name__ == '__main__':
parser = argparse.ArgumentParser()
# python scheduler.py --type cron --day Mon-Sun --hour 18 --min 30
parser.add_argument("--type", default="cron", type=str,
choices=['cron', 'interval'], help="The type of the scheduler")
parser.add_argument("--day", default="Mon-Sun", type=str,
help="The day of the scheulder")
parser.add_argument("--hour", default="00", type=str,
help="The day of the scheulder")
parser.add_argument("--min", default="0", type=str,
help="The minute of the scheulder")
args = parser.parse_args()
try:
scheduler = Scheduler()
scheduler.scheduler(args)
except Exception as msg:
print(msg)
반응형
'Python' 카테고리의 다른 글
Python에서 Java 코드 사용하기(feat. jpype) (0) | 2021.07.31 |
---|---|
curl command to python requests (curl 명령어 python request로 변환) (0) | 2021.07.02 |
Python 지정 경로에 폴더가 없으면 생성하는 법 (0) | 2021.06.22 |
Flask를 이용한 웹 서버 구현 (0) | 2021.06.16 |
[Python] 유튜브 댓글 크롤러 youtube comment crawl with Selenium, Chrome Driver (0) | 2021.06.16 |
댓글