Python/Utils

파이썬 특정 시각에 코드를 실행하는 방법(schedule, threading 모듈 활용)

jimmy_AI 2023. 9. 18. 00:20
반응형

Python에서 코드를 실행시켜 두었을 때,

특정 시각마다 원하는 코드가 작동되도록 하고 싶을 때가 있습니다.

 

이번 글에서는 파이썬 내부에서 코드 주기적 실행이 가능하도록 하는 방법을

기본 예제와 별도의 스레드를 두는 예제로 나누어 간략하게 정리해보도록 하겠습니다.

 

 

특정 시각 실행 기본 예제(schedule 모듈)

예를 들어, 매일 오전 11시에 my_job() 함수 내의 코드를 실행하고 싶다면

schedule 라이브러리를 활용하여 다음과 같이 코드를 작성해주시면 됩니다.

import schedule # 미설치 시 !pip install schedule
import time

def my_job():
    print("오전 11시 입니다!")

schedule.every().day.at("11:00").do(my_job)
# schedule.every().day.at("02:00").do(my_job) UTC+9 반영

while True:
    schedule.run_pending()
    time.sleep(1) # 다른 코드 실행을 이후에 진행하면 됨

UTC 기준의 시간을 고려하여 실제로 실행되는 시각과 일치하는지 확인이 필요합니다.

 

참고로, 매일이 아니라 매 30분, 매 시간, 매 월요일 등의 단위에 주기적 실행을 하기 위한 방법도

위 코드에서 schedule.every().day~ 부분만 살짝 바꾸어주시면 됩니다.

 

3) 원하는 시간마다 파이썬 자동 실행

시작하기에 앞서, 오늘은 VS Code에서 파이썬 파일(.py)를 개발환경으로 사용하는 점 참고바랍니다. schedule 패키지를 쥬피터 노트북(.ipynb)으로 다루니 프로…

wikidocs.net

상세한 방법은 바로 위에 첨부한 글을 참고하시면 도움이 되실 듯 합니다.

 

반응형

 

별도의 스레드를 두고 특정 시각 실행 예제(threading 모듈 같이 사용)

만약, 한 코드에서 서버를 띄워둔 상태에서 특정 시각 코드 실행도 같이 수행하고 싶은 등의

복합적인 상황에서는 위의 스케줄 모듈 활용을 위하여 별도의 스레드를 둘 필요가 있습니다.

 

이 경우에는 threading 라이브러리의 기능을 같이 사용해주면 해결이 됩니다.

이 과정은 다음 예시 코드처럼 작성해주시면 됩니다.

import schedule
import time
import threading

def main():
    # 서버 작동 코드 등...

def my_job():
    print("오전 11시 입니다!")

schedule.every().day.at("11:00").do(my_job)
# schedule.every().day.at("02:00").do(my_job) UTC+9 반영

# 스케줄링 작업을 수행하는 별도 스레드 실행
def start_schedule():
    while True:
        schedule.run_pending()
        time.sleep(1)
        
schedule_thread = threading.Thread(target = start_schedule)
schedule_thread.start()

if __name__ == "__main__":
    main()

이런 식으로 코드를 작성해주시면 서버 코드 등을 작동시키면서

동시에 주기적 작업 스케줄링도 가능해집니다.