[python] pytz를 사용하여 주기적인 작업 예약하기

많은 애플리케이션들이 일정한 주기로 작업을 수행해야 할 때가 있습니다. 예를 들어, 데이터베이스 정리, 이메일 발송, 백업 등의 작업들은 주기적으로 실행되어야 합니다.

Python에서는 pytz 모듈을 사용하여 주기적인 작업 예약을 쉽게 구현할 수 있습니다. pytz는 시간대(timezone)를 다루는 파이썬 모듈이며, 작업을 예약할 때 시간대 관련 문제를 해결할 수 있습니다.

다음은 주기적인 작업 예약을 구현하는 예제입니다.

import pytz
import datetime
import time

def job():
    # 작업 내용을 여기에 작성합니다.
    print("주기적인 작업 실행:", datetime.datetime.now())

def schedule_job(interval, timezone):
    while True:
        local_tz = pytz.timezone(timezone)
        now = datetime.datetime.now(local_tz)
        next_run = now + interval

        # 다음 작업 예약 시간까지 대기합니다.
        sleep_time = (next_run - datetime.datetime.now()).total_seconds()
        time.sleep(sleep_time)
        
        # 작업 실행
        job()

예제에서 job() 함수는 실제로 실행되어야 할 작업을 나타냅니다. 이 함수 안에 주기적으로 실행되어야 할 코드를 작성하면 됩니다.

schedule_job() 함수는 주기와 시간대를 인자로 받아서 작업을 예약합니다. interval은 작업 실행 주기를 의미합니다. 예를 들어, datetime.timedelta(hours=1)을 전달하면 1시간마다 작업이 실행됩니다. timezone은 작업이 실행될 시간대를 의미합니다.

예제에서는 next_run 변수를 계산하여 다음 작업 예약 시간을 구하고, time.sleep() 함수를 사용하여 다음 작업 예약 시간까지 대기합니다. 대기 시간은 sleep_time 변수를 통해 계산됩니다. 그리고 job() 함수를 호출하여 작업을 실행합니다.

이제 schedule_job() 함수를 호출하여 주기적인 작업을 예약할 수 있습니다.

# 예제 사용법
interval = datetime.timedelta(hours=1)
timezone = 'Asia/Seoul'
schedule_job(interval, timezone)

위 예제에서는 작업을 1시간마다 한 번씩 실행하도록 예약하고, 시간대는 한국 시간인 ‘Asia/Seoul’로 설정했습니다.

더 자세한 내용은 pytz 공식 문서를 참고하시기 바랍니다.