파이썬에서 원하는 시간마다 자동 실행하기: Schedule 패키지 사용법


파이썬으로 프로그램을 개발하다 보면 특정 작업을 정해진 시간에 주기적으로 실행해야 하는 경우가 종종 발생합니다. 예를 들어, 데이터 백업을 하루에 한 번씩 자동으로 실행하거나, 시스템 상태를 모니터링하는 작업을 5분마다 체크해야 할 수도 있죠. 이런 경우에 매우 유용한 도구가 바로 schedule 패키지입니다. 이번 글에서는 파이썬의 schedule 패키지를 이용하여 간단하게 자동 실행 프로그램을 구성하는 방법을 설명하겠습니다. 본 글은 VS Code를 개발 환경으로 사용하고, Python(.py) 파일을 기준으로 설명합니다.

1. Schedule 패키지 설치하기

먼저 schedule 패키지를 설치해야 합니다. 터미널 창에서 다음 명령어를 입력하여 간단하게 설치할 수 있습니다.

pip install schedule

설치가 완료되면, 별다른 오류 메시지가 없는지 확인한 후 다음 단계로 진행합니다.

2. Schedule과 Time 모듈 불러오기

schedule 패키지를 사용할 때는 파이썬의 내장 모듈인 time과 함께 사용하는 경우가 많습니다. 기본적으로 schedule이 설정한 주기를 관리하고, time 모듈은 프로그램의 흐름을 제어하는 데 사용됩니다. 아래와 같이 두 모듈을 함께 불러옵니다.

import schedule
import time

3. Schedule 패키지로 주기 설정하는 방법

이제 schedule 패키지를 사용해 원하는 주기로 작업을 설정하는 방법을 살펴보겠습니다. 다양한 시나리오에 맞게 시간 단위(초, 분, 시간) 및 날짜 단위(일, 주)를 설정할 수 있습니다.

1) 시, 분, 초 단위로 설정하기

# 5초에 한 번씩 함수 실행
schedule.every(5).seconds.do(함수)

# 10분에 한 번씩 함수 실행
schedule.every(10).minutes.do(함수)

# 2시간에 한 번씩 함수 실행
schedule.every(2).hours.do(함수)
2) 일, 주 단위로 설정하기

# 3일에 한 번씩 함수 실행
schedule.every(3).days.do(함수)

# 2주에 한 번씩 함수 실행
schedule.every(2).weeks.do(함수)
3) 특정 시간에 실행하기

주기뿐만 아니라 매일 정해진 시간에 작업을 실행하도록 설정할 수 있습니다.


# 매일 오후 1시 30분에 함수 실행
schedule.every().day.at("13:30").do(함수)

# 매일 "11:11:11"에 함수 실행
schedule.every().day.at("11:11:11").do(함수)
4) 특정 요일에 실행하기

요일별로 특정 시간에 작업을 설정할 수도 있습니다. 모든 요일은 소문자로 입력해야 합니다.


# 매주 월요일 오후 1시 30분에 함수 실행
schedule.every().monday.at("13:30").do(함수)

4. Schedule 패키지 실행하기

이제 설정한 주기로 작업을 자동 실행하도록 프로그램을 구성해보겠습니다. 전체 코드의 흐름은 다음과 같습니다.


import schedule
import time

# 실행할 함수 선언
def message():
    print("스케줄 실행 중...")

# 실행 주기 설정
schedule.every(1).seconds.do(message)

# 스케줄 시작
while True:
    schedule.run_pending()
    time.sleep(1)

이 코드에서 while 문을 사용하여 프로그램이 종료되지 않고 주기적으로 작업을 수행할 수 있도록 합니다. schedule.run_pending()을 통해 실행 대기 중인 작업들을 호출하고, time.sleep(1)을 사용하여 CPU 사용을 절약할 수 있습니다.

5. 인자를 받는 함수 설정하기

지금까지는 간단한 함수 호출만 다루었지만, 인자를 받아야 하는 경우도 있습니다. 인자를 받는 함수는 약간 다른 방식으로 설정해야 합니다.


def message_with_param(text):
    print(text)

# 2초마다 "2초마다 알려줄게요" 출력
schedule.every(2).seconds.do(message_with_param, '2초마다 알려줄게요')

여기서 주의할 점은 함수 호출 시 message_with_param(인자)와 같이 작성하지 않고, 인자를 do() 메서드의 두 번째 인자로 전달해야 한다는 점입니다.

6. Schedule 중지하는 법

작업이 완료되거나 특정 조건을 만족할 때 스케줄링을 중지해야 할 수도 있습니다. 이 경우 cancel_job()을 사용할 수 있습니다.


import schedule
import time

def message1():
    print("스케줄 실행 중...")

def message2(text):
    print(text)

# 주기 설정
job1 = schedule.every(1).seconds.do(message1)
job2 = schedule.every(2).seconds.do(message2, '2초마다 알려줄게요')

count = 0

while True:
    schedule.run_pending()
    time.sleep(1)
    count += 1

    # 특정 조건에서 스케줄 중지
    if count > 5:
        schedule.cancel_job(job1)

위의 예제에서는 count 변수를 이용하여 5번 이상 실행되면 job1을 중지하도록 설정하였습니다. 이처럼 특정 조건을 설정하여 유연하게 관리할 수 있습니다.

맺음말

이번 글에서는 파이썬 schedule 패키지를 사용해 다양한 주기로 작업을 자동 실행하는 방법을 소개하였습니다. 특히 시간 단위 설정과 요일별 실행, 그리고 인자를 받는 함수 설정 등 다양한 활용법을 다루어 보았습니다. 이를 바탕으로 여러분의 프로젝트에 맞는 자동화 시스템을 구축해보세요.


2930 Blog에서 더 알아보기

구독을 신청하면 최신 게시물을 이메일로 받아볼 수 있습니다.