[수정중...]Schedule 라이브러리

IT Newbie·2022년 6월 30일
0

Schedule 라이브러리

Schedule 라이브러리는 특정한 작업(함수)를 주기적으로 실행/작업하기 위하여 사용하는 스케줄러 입니다.

리눅스 OS 환경의 crontab, 윈도우 OS 환경의 작업 스케줄러와 같은 역할을 하고 실행할 주기, 날짜, 시간, 요일 등 을 지정하여 원하는 시점에 작업을 실행하거나 원하는 주기로 반복 실행하도록 구현할 수 있습니다.

리눅스의 crontab, 윈도우의 작업스케줄러와 차이점은 어플리케이션 레벨에서 스케줄러가 수행되는 점이 차이가 있습니다.

Schedule 라이브러리 설치

schedule 라이브러리를 사용하기 위하여 pip 명령어를 이용하여 설치를 합니다.

pip install schedule
Schedule 클래스

schedule.default_scheduler = <schedule.Scheduler object>
Default Scheduler object

Scheduler의 기본 객체 입니다.
schedule.jobs = []
Default Jobs list

Scheduler에 등록된 Job 리스트를 보관하는 변수입니다.
schedule.every(interval=1)
Calls every on the default scheduler instance.

설정한 intreval 주기로 지정한 Function을 호출합니다.
스케쥴은 schedule.every().xxx.func() 와 같은 형태로 정의할 수 있습니다.
xxx에 사용 가능한 지정자는 second, seconds, minute, minutes, hour, hours, day, days, week, weeks, monday, tuesday, wednesday, thursday, friday, saturday, sunday
func()에서 사용가능한 함수로는 tag(*tags), at(time_str), to(latest), do(job_func), run() 등이 있습니다.
schedule.run_pending()
Calls run_pending on the default scheduler instance.

실행 예약된 모든 작업을 실행합니다.
schedule.run_all(delay_seconds=0)
Calls run_all on the default scheduler instance.

실행 예약에 관계없이 모든 작업을 일괄 실행합니다.
모든 Job이 일괄 실행될 때 작업간의 지연 시간을 delay_seconds를 이용하여 설정할 수 있습니다.
schedule.clear(tag=None)
Calls clear on the default scheduler instance.

예악된 Job을 Job 리스트에서 모두 삭제합니다.
tag가 지정되어 있을 경우에는 지정된 태그의 Job만 삭제 됩니다.
schedule.cancel_job(job)
Calls cancel_job on the default scheduler instance.

예약된 작업의 스케쥴을 취소합니다.
schedule.next_run()
Calls next_run on the default scheduler instance.

다음 실행될 작업의 날짜를 반환합니다.
schedule.idle_seconds()
Calls idle_seconds on the default scheduler instance.

Job이 수행될 다음 계획(next_Run)까지 남은 시간을 반환합니다.
양수는 남은 시간, 음수는 지난 시간을 의미합니다.
샘플 코드

Schedule 라이브러리의 샘플 코드는 아래와 같습니다.

import schedule
import time

def job():
print("Do Job...!!!")

schedule.every(10).minutes.do(job)
schedule.every().hour.do(job)
schedule.every().day.at("10:30").do(job)
schedule.every(5).to(10).minutes.do(job)
schedule.every().monday.do(job)
schedule.every().wednesday.at("13:15").do(job)
schedule.every().minute.at(":17").do(job)

while True:
schedule.run_pending()
time.sleep(1)
def job()과 같이 스케쥴링할 함수를 정의합니다.

그리고 schedule.every(x).yyy.func()와 같은 형식으로 schedule 라이브러리를 이용하여 스케쥴잡을 등록합니다.

schedule.run_pending() 함수를 1초 주기로 호출하여 등록된 스케쥴 Job의 계획을 확인하고 계획(주기 또는 시점)에 해당되는 Job을 수행합니다.

위 샘플 코드와 같이 기본적으로 스케쥴잡을 등록하고 사용하는 방법은 간단합니다.

마치며

Python에서 제공하는 라이브러리인 schedule 라이브러리에 대해서 내용을 확인하고 정리해 보았습니다.

다음 포스트에서는 schedule 라이브러리에서 제공되는 내용을 바탕으로 테스트가 가능한 범위 내에서 가능한 많은 테스트를 진행하고 동작 결과에 대하여 확인해 보도록 하겠습니다.

레퍼런스

ㅇ Schedule 라이브러리

https://schedule.readthedocs.io/en/stable/
https://pypi.org/project/schedule/
ㅇ Schedule 개발자 인터페이스

https://schedule.readthedocs.io/en/stable/api.html
ㅇ Schedule 소스 코드

https://schedule.readthedocs.io/en/stable/_modules/schedule.html#every

0개의 댓글