네로개발일기

개발자 네로의 개발 일기, 자바를 좋아합니다 !

반응형

파이썬에서 특정 시간마다 배치를 돌릴 수 있는 스케쥴링을 수행할 수 있는 모듈이 2개가 있다.

1) schedule

2) apscheduler

 

1) schedule

schedule은 명령어가 직관적으로 알아볼 수 있어 사용이 용이하다.

설정이 복잡해질 경우 사용 여부를 고려하는 것이 좋다.

# schedule 설치
> pip install schedule
# 사용 방법
import schedule
import time

def job():
    print("Hello world!")
    
# 10초에 한번씩 실행
schedule.every(10).seconds.do(job)
# 10분에 한번씩 실행
schedule.every(10).minutes.do(job)
# 매 시간 실행
schedule.every().hour.do(job)
# 매일 10:30 에 실행
schedule.every().day.at("10:30").do(job)
# 매주 월요일 실행
schedule.every().monday.do(job)
# 매주 수요일 13:15 에 실행
schedule.every().wednesday.at("13:15").do(job)
 
while True:
    schedule.run_pending()
    time.sleep(1)

- 함수에 인자를 전달하는 방법

# 사용 방법
import schedule
import time 

def job(text):
	print(text)
    
# job("Hello world!") 를 10초에 한번씩 실행
schedule.every(10).seconds.do(job, "text") 

while True:
    schedule.run_pending()
    time.sleep(1)

 

2) apscheduler

수행 방식은 3가지가 있다.

- Cron 방식: Cron 표현식으로 수행

- Date 방식: 특정 날짜에 수행

- Interval 방식: 일정 주기로 수행

 

각 방식마다 파라미터가 달라집니다.

 

스케줄 종류에는 BlockingScheduler, BackgroundScheduler 가 있다.

BlockingScheduler는 단일 수행에, BackgroundScheduler는 다중 수행에 사용된다.

 

# apschedule 설치
> pip install apschedule
# 사용방법

from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.jobstores.base import JobLookupError

import time

def job_1():
    print("Job1 실행: ", "| [time] "
          , str(time.localtime().tm_hour) + ":"
          + str(time.localtime().tm_min) + ":"
          + str(time.localtime().tm_sec))


def job_2():
    print("Job2 실행: ", "| [time] "
          , str(time.localtime().tm_hour) + ":"
          + str(time.localtime().tm_min) + ":"
          + str(time.localtime().tm_sec))

# BackgroundScheduler을 사용하면 start를 먼저 하고 add_job을 이용해 수행할 것을 등록해줍니다.
sched = BackgroundScheduler()
sched.start()

# interval - 매 3초마다 실행
sched.add_job(job, 'interval', seconds=3, id="test_2")

# cron 사용 - 매 5초마다 job 실행
# 	: id 는 고유 수행번호로 겹치면 수행되지 않습니다.
# 	만약 겹치면 다음의 에러 발생 => 'Job identifier (test_1) conflicts with an existing job'
sched.add_job(job_1, 'cron', second='*/5', id="test_1")

# cron 으로 하는 경우는 다음과 같이 파라미터를 상황에 따라 여러개 넣어도 됩니다.
# 	매시간 59분 10초에 실행한다는 의미.
sched.add_job(job_2, 'cron', minute="59", second='10', id="test_10")

while True:
    print("Running main process...............")
    time.sleep(1)

 

참고

https://pypi.org/project/APScheduler/3.2.0/

 

APScheduler

In-process task scheduler with Cron-like capabilities

pypi.org

 

728x90
반응형
blog image

Written by ner.o

개발자 네로의 개발 일기, 자바를 좋아합니다 !