[python] pytz를 사용하여 특정 시간대에서 현재 시간을 기반으로 반복 작업 예약하기

특정 시간대에서 현재 시간을 기반으로 반복 작업을 예약하고 싶다면, pytz 라이브러리를 사용할 수 있습니다. pytz는 Python에서 시간대를 다루기 위한 편리한 기능을 제공하는 라이브러리입니다.

1. pytz 설치하기

먼저, pytz를 설치해야 합니다. 다음 명령어를 사용하여 pytz를 설치할 수 있습니다.

pip install pytz

2. 특정 시간대로 시간 설정하기

반복 작업을 예약하기 위해, 먼저 특정 시간대로 시간을 설정해야 합니다. pytz를 사용하여 특정 시간대를 선택할 수 있습니다. 다음 예제는 ‘Asia/Seoul’ 시간대로 시간을 설정하는 방법을 보여줍니다.

from datetime import datetime
import pytz

# 현재 시간을 가져온다
now = datetime.now()

# 특정 시간대로 시간을 설정한다
timezone = pytz.timezone('Asia/Seoul')
localized_time = now.astimezone(timezone)

# 설정한 시간을 출력한다
print(localized_time)

3. 반복 작업 예약하기

특정 시간대로 시간을 설정한 후에는, 반복 작업을 예약할 수 있습니다. 예를 들어 매 시간에 특정 작업을 수행하고 싶다면, datetime 객체의 replace 메서드를 사용하여 시간을 변경하고 작업을 수행하는 코드를 작성할 수 있습니다.

from datetime import datetime, timedelta
import pytz

# 반복 작업 예약을 위해 특정 시간대로 시간을 설정한다
timezone = pytz.timezone('Asia/Seoul')

# 현재 시간을 가져온다
now = datetime.now().astimezone(timezone)

# 작업을 예약할 시간을 설정한다
scheduled_time = now.replace(minute=0, second=0, microsecond=0) + timedelta(hours=1)

# 작업 예약을 확인한다
print(f"작업이 예약되었습니다. 예약 시간: {scheduled_time}")

# 작업을 수행하는 코드를 작성한다
def do_task():
    print("작업을 수행합니다.")

# 작업 예약 시간이 되면 작업을 수행한다
while datetime.now().astimezone(timezone) < scheduled_time:
    pass

do_task()

위 코드는 매 시간 정각마다 do_task 함수를 실행하는 예제입니다. scheduled_time 변수에는 다음 시간대의 정각 시간이 예약되어 있으며, 이 시간이 되면 do_task 함수가 실행됩니다.

do_task 함수에 원하는 작업을 작성하고, 필요에 따라 작업 예약 주기를 변경할 수 있습니다.

참고 자료