1. schedule 라이브러리 소개
이번 강의에서는, 시계처럼 정확하게 동작하는 코드를 작성하는 법을 배울 거야. 우리의 코드가 우리가 원할 때 작동하도록 작업을 일정에 따라 실행해 보자. 준비됐어? 오늘은 시간을 길들일 거야!
schedule 라이브러리는 작업을 일정에 맞게 실행하기 위한 가벼운 모듈이야. 예를 들어, 매일 아침 6시에 데이터를 수집하거나, 매일 알림을 보내야 할 때 schedule이 딱 맞는 도구야.
schedule 주요 장점:
- 간단함:
cron이나threading같은 표준 솔루션보다 훨씬 직관적인 인터페이스. - 미니멀리즘: 꼭 필요한 기능만 제공, 불필요한 기능 없음.
- 가독성: 자연어와 비슷한 방식으로 일정 정의.
라이브러리 설치
작업을 시작하려면 schedule 라이브러리를 설치해야 해. 대부분의 Python 라이브러리처럼 pip을 사용하면 돼:
pip install schedule
이제 준비가 끝났어, 자동화의 세계로 뛰어들어서 schedule이 너의 일상을 어떻게 바꿀 수 있는지 확인해 보자.
schedule 라이브러리의 주요 메서드
schedule 라이브러리는 작업을 설정하고 다양한 시간 간격에 따라 실행할 수 있는 메서드를 제공해:
every().day.at("HH:MM")— 특정 시간에 매일 작업 실행.every().hour— 매 시간마다 작업 실행.every().minute— 매 분마다 작업 실행.every().week.at("HH:MM")— 특정 시간에 매주 작업 실행.every().monday.at("HH:MM")— 특정 시간에 매주 월요일 작업 실행.every(10).seconds— 매 10초(또는 기타 시간 간격)마다 작업 실행.
2. 반복 작업 설정
우선 간단한 예제로 시작해 보자. 매 시간 실행되는 함수를 계획해 보자. 간단한 인사 메시지를 출력하는 함수를 작성하고 일정을 설정해보자.
예제: 매 시간마다 인사하기
import schedule
import time
def say_hello():
print("안녕! 우리는 시간 자동화 중이야.")
# 매 시간마다 say_hello 함수 실행
schedule.every().hour.do(say_hello)
while True:
# 예정된 모든 작업 실행
schedule.run_pending()
time.sleep(1)
자, 이것이 schedule을 사용한 첫 번째 스크립트야! 이 예제는 메서드 every().hour.do(say_hello)를 사용해서 매 시간마다 "안녕!"을 말하게 해. 재미있지 않아?
schedule.every().hour.do(say_hello) 명령은 say_hello 함수를 바로 실행하는 게 아니라, 해당 호출을 일정에 추가하는 거야. 함수는 시간이 되면 schedule.run_pending()을 통해 호출돼.
3. 더 복잡한 간격 설정
만약 우리가 매 시간뿐만 아니라, 10분마다 혹은 특정 요일에 작업을 실행하고 싶다면? schedule은 일반적인 시간 표현을 대부분 지원하며, 이들을 쉽게 사용할 수 있어.
예제: 10분마다 작업 실행
import schedule
import time
def task():
print("이 작업은 10분마다 실행됩니다.")
# 10분마다 작업 실행 예약
schedule.every(10).minutes.do(task)
while True:
schedule.run_pending() # 예정된 모든 작업 호출
time.sleep(1)
예제: 특정 요일에 작업 실행
이제 특정 요일, 예를 들어 월요일과 수요일 오전 9시에 실행되는 작업을 계획해 보자.
import schedule
import time
def monday_wednesday_task():
print("이 작업은 월요일과 수요일 오전 9시에 실행됩니다.")
# 월요일과 수요일 오전 9시에 작업 실행 설정
schedule.every().monday.at("09:00").do(monday_wednesday_task)
schedule.every().wednesday.at("09:00").do(monday_wednesday_task)
while True:
schedule.run_pending()
time.sleep(1)
보다시피, schedule은 특정 요일 및 시간을 포함한 다양한 시간 표현을 처리할 수 있어. 작업 계획을 간소화하고, 업무나 일정과 동기화하는 데 정말 유용해.
4. 다양한 시간 조건의 작업 처리
만약 여러 작업을 실행해야 하고, 각 작업마다 일정이 다르다면 schedule로도 문제 없어. 예를 들어, 하나는 매 아침마다 실행하고, 다른 하나는 금요일마다 실행할 수 있어.
예제: 여러 작업을 하나의 스크립트에 결합
import schedule
import time
def morning_task():
print("좋은 아침! 아침 작업 시간입니다.")
def friday_task():
print("와우, 금요일! 금요일 작업 시간입니다.")
# 매일 아침 7:30에 아침 작업 실행
schedule.every().day.at("07:30").do(morning_task)
# 매주 금요일 16:00에 금요일 작업 실행
schedule.every().friday.at("16:00").do(friday_task)
while True:
schedule.run_pending()
time.sleep(1)
실용적인 팁과 일반적인 실수
schedule을 사용한 작업 자동화에서는 고려할 몇 가지 측면이 있어.
첫째, schedule은 기본적으로 메인 스레드에서 작업을 실행해. 작업이 오래 걸리거나 다른 작업 실행을 막을 가능성이 있다면, 멀티스레딩이나 비동기 호출을 고려해봐.
둘째, 작업이 특정 시간에 실행되는 것이 매우 중요하다면, 장치가 켜져 있고 스크립트가 실행 중인지 확인해. schedule은 스크립트가 중지되거나 장치가 꺼진 상태에서는 작동하지 않아.
마지막으로, 종종 발생하는 오해는 schedule이 놓친 작업을 보상할 수 있다고 기대하는 거야. 안타깝게도, 스크립트가 실행되지 않은 상태에서 작업이 실행될 시간이 지났다면, schedule은 이를 소급 실행하지 않아.
GO TO FULL VERSION