반응형
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~ 부분만 살짝 바꾸어주시면 됩니다.
상세한 방법은 바로 위에 첨부한 글을 참고하시면 도움이 되실 듯 합니다.
반응형
별도의 스레드를 두고 특정 시각 실행 예제(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()
이런 식으로 코드를 작성해주시면 서버 코드 등을 작동시키면서
동시에 주기적 작업 스케줄링도 가능해집니다.
'Python > Utils' 카테고리의 다른 글
파이썬 해시 함수 모듈 hashlib 사용법 (0) | 2023.09.23 |
---|---|
파이썬 requests 비동기로 요청하기(aiohttp 및 asyncio 활용) (0) | 2023.09.16 |
파이썬 지도 시각화 모듈 Pygmt 튜토리얼 예제 (0) | 2022.12.16 |