CodeGym /행동 /Python SELF KO /반복 작업 설정하기 (일일 및 주간 알림)

반복 작업 설정하기 (일일 및 주간 알림)

Python SELF KO
레벨 40 , 레슨 0
사용 가능

1. 간단한 작업 설정

가장 간단한 예제를 시작해 보자: 매일 이메일을 확인하라고 알림을 받도록 코드 설정하기.

Python

import schedule
import time

def job():
    print("알림: 이메일을 확인하세요!")

# 매일 실행되는 작업 설정
schedule.every().day.at("09:00").do(job)

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

이 예제에서 job 함수는 매일 아침 9시에 호출될 거야. schedule 라이브러리는 run_pending()을 사용하여 1초마다 예약된 작업이 있는지 확인해. 작업이 실행되려면 코드가 계속 실행 중이어야 해.

해커를 위한 팁

every().hour를 사용하여 매시간 작업을 실행하거나, every(2).hours로 두 시간마다 작업을 실행할 수도 있어. 옵션이 거의 무한대로 있어.

2. 주중 알림

이제 상황을 좀 더 복잡하게 만들어보자: 주중에만 알림이 필요한 상황. 예를 들어, 매주 평일에 반복되는 알림이 필요하다고 하자.

Python

import schedule
import time

def weekday_job():
    print("업무 알림: 리포트를 준비하는 걸 잊지 마세요!")

schedule.every().monday.at("08:00").do(weekday_job)
schedule.every().tuesday.at("08:00").do(weekday_job)
schedule.every().wednesday.at("08:00").do(weekday_job)
schedule.every().thursday.at("08:00").do(weekday_job)
schedule.every().friday.at("08:00").do(weekday_job)

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

이 경우 매주 평일 아침 8시에 리포트를 준비하라는 알림이 제공될 거야. 이 스크립트 덕분에 일정 관리를 깜빡해도 시스템이 알아서 챙겨줄 거야.

3. 매주 반복되는 작업 설정

매주 일요일에 알림을 받으려면 어떻게 해야 할까? 예를 들어, 업무 시작 전에 커피 재고를 확인하라는 알림을 받고 싶다고 하자. 다음 코드를 보자:

Python

import schedule
import time

def sunday_job():
    print("알림: 다음 주를 위해 커피 재고를 확인하세요!")

schedule.every().sunday.at("18:00").do(sunday_job)

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

이 간단한 코드 조각은 여러분의 일요일을 좀 더 정리된 느낌으로 만들어 줄 거야. 다음 주를 대비할 수 있게 도와주지. 이제 커피가 예상치 못한 순간에 떨어지는 불상사는 없을 거야. 커피가 떨어지는 건 정말 슬픈 일이니까.

4. 작업 변경

스케줄에서 작업 삭제

작업 실행을 취소하려면 cancel_job() 메서드를 사용할 수 있어. 예를 들어, 작업 객체를 가져와서 cancel_job()을 호출하여 삭제할 수 있어.

Python

job = schedule.every().day.at("09:00").do(daily_task)
schedule.cancel_job(job)  # 스케줄에서 작업 삭제

작업 재배치

작업 실행 시간을 변경하려면 다시 스케줄을 지정할 수 있어. 예를 들어, 작업이 9:00에 예정되어 있었는데 10:00으로 옮겨야 한다면, 다음과 같이 재스케줄링할 수 있어.

Python

# 매일 9시에 작업 설정
job = schedule.every().day.at("09:00").do(my_task)

# 작업을 10시로 변경
job.clear()  # 현재 작업 스케줄 삭제
job.at("10:00")  # 새로운 시간으로 변경

활성 작업 확인

예약된 작업이 있는지 확인하려면 schedule.jobs를 사용하여 활성 작업 목록을 출력할 수 있어. 이 방법은 모든 예약된 작업 정보를 얻는 데 유용해.

Python

# 여러 작업 추가
schedule.every().day.at("09:00").do(my_task)
schedule.every().monday.at("10:00").do(my_task)

# 모든 활성 작업 확인
for job in schedule.jobs:
    print("작업:", job)

스케줄에서 모든 작업 삭제

스케줄을 지우고 예약된 모든 작업을 삭제하려면 clear() 메서드를 사용할 수 있어.

Python

# 여러 작업 스케줄
schedule.every().day.at("09:00").do(my_task)
schedule.every().hour.do(my_task)

# 스케줄 삭제
schedule.clear()

작업을 한 번만 실행

가끔은 작업을 한 번만 실행해야 할 때가 있어. 작업을 수행한 후에는 schedule.cancel_job(job) 메서드를 사용하여 작업을 취소할 수 있어.

Python

def one_time_task():
    print("작업이 한 번 실행되었습니다.")
    return schedule.CancelJob  # 작업 실행 후 즉시 취소

# 작업을 한 번 실행하도록 예약
schedule.every().day.at("09:00").do(one_time_task)

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

5. 실사용 사례

이제 좀 더 진지하게 알아보자: 이러한 자동화는 전문 환경에서 어떻게 활용될까? 실제로 여러분은 다음과 같은 작업 스케줄링에 사용할 수 있어:

  • 매일 또는 매주 데이터를 자동으로 수집하기.
  • 특정 날과 시간에 보고서를 생성하고 보내기.
  • 서버 상태나 웹 인터페이스를 모니터링하고 오류 알림 받기.
  • 데이터베이스의 정기 백업 실행하기.

일반적인 실수

작업을 스케줄링하면서 시간을 불일치시키는 경우를 조심해야 해, 예를 들어 서버와 로컬 컴퓨터가 다른 시간대에 있는 경우. 또한 스크립트가 우연히 종료되면 예약된 작업이 실행되지 않으니 주의해야 해. cron (Unix 기반 시스템용)이나 Windows Task Scheduler 같은 모니터링 도구를 사용해봐.

만약 time.sleep(1)을 루프 마지막에 넣는 걸 잊으면, CPU를 계속 점유하는 코드 폭주 상태가 될 수 있어. 그러니까 스크립트를 잘 유지보수하도록 하자.

코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION