[TIL] Python schedule

so_doit·2022년 2월 25일
0

TIL

목록 보기
8/26

오늘은 특정한 작업을 주기마다 실행하기 위해서 어떻게 할까 찾아보다가 여러 방법들 중에 하나인 Schedule 라이브러리를 사용해 보기로 했다.

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)까지 남은 시간을 반환합니다.
    양수는 남은 시간, 음수는 지난 시간을 의미합니다.

사용 코드

아래 코드와 같이 scheduel 사용법은 간단하다.

import schedule
import time

def job():
	print('job job')
    
# 1분마다 job 실행
schedule.every(1).minutes.do(job)

#매일 12시마다 job 실행
schedule.every().day.at("12:00:).do(job)

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

회고

주기마다 함수를 실행하는 방법에 뭐가 있는지 잘 몰랐지만 오늘 schedule을 사용해서 할 수 있다는 것을 알게 되었다. 생각보다 등록해서 사용하는게 간단하고 쉬웠다.

schedule에 대해서 모르는 사람이 봐도 코드를 보고 이해할 수 있을 것 같아 보였다.

profile
백엔드 개발자

0개의 댓글