본문 바로가기

코딩/Python

[Python/파이썬] 특정 시간에 파이썬 코드 동작시키기 - schedule 모듈

반응형

 

  이전 포스팅에서 아웃룩 메일의 첨부 파일을 자동으로 취합하는 코드를 작성한 적이 있다.

 

(관련 포스팅 : 2021.04.28 - [코딩/Project] - [Python/파이썬] Outlook 메일 첨부 엑셀파일의 내용 자동 취합하기)

 

[Python/파이썬] Outlook 메일 첨부 엑셀파일의 내용 자동 취합하기

※ 이 글을 쓰는 사람은 SW 비전공자입니다. ※ 개인 공부를 위해 정리하는 글이며, 작성한 코드들은 효율성, 깔끔함(?) 등과는 거리가 멀 수 있습니다. ※ 이전 포스팅 1편 : 2021.03.01 - [코딩/Python]

ybworld.tistory.com

 

 

  실제 실무에 쓰기 위한 컨셉으로 내가 실제 동작시키는 것이 아닌 코드상에서 특정 시간이 되면 알아서 동작하여 메일의 첨부파일이 자동으로 취합되는 코드를 작성하려고 한다. 찾아보니 파이썬에는 스케쥴링이라는 모듈이 있는데 이 모듈을 사용하면 특정시간에 파이썬 코드를 동작시킬 수 있다.

 

  꼭 내가 하려는 부분이 아니더라도 웹 크롤링같이 주기적으로 정보를 얻어와야할 때 스케쥴 모듈을 사용하면 다양하게 활용할 수 있을 것 같다.

 

  일단 schedule 모듈은 내장 모듈이 아니기에 pip install을 통해 설치해준다.(pip install schedule)

 

schdule 모듈 설치

 

 

1.  schedule 모듈 사용법

 

 

<코드>

import schedule
import time
import datetime

#스케쥴 모듈이 동작시킬 코드 : 현재 시간 출력
def test_fuction():
    now = datetime.datetime.now()
    print("test code- 현재 시간 출력하기")
    print(now)
    
#1초마다 test_fuction을 동작시키자
schedule.every(1).seconds.do(test_fuction)

#무한 루프를 돌면서 스케쥴을 유지한다.
while True:
    schedule.run_pending()
    time.sleep(1)

 

<결과>

2021-05-16 22:08:08.464882
test code- 현재 시간 출력하기
2021-05-16 22:08:09.480980
test code- 현재 시간 출력하기
2021-05-16 22:08:10.492642
test code- 현재 시간 출력하기
2021-05-16 22:08:11.507662
test code- 현재 시간 출력하기
2021-05-16 22:08:12.513250

 

 

-. 사용법은 간단하다. 아래와 같이 코드와 같이 작성하면 1초마다 test_fuction을 동작시키게 된다.

schedule.every(1).seconds.do(test_fuction)

 

-. 스케쥴을 지속적으로 유지하기 위해 아래와 같은 While True 무한 루프 구문을 활용한다.

  아래 코드는 schedule.run_pending()은 무한루프를 돌면서 1초에 한번씩 스케쥴을 지속적으로 체크하는 구문이다.

  (이 구문이 있어야 스케쥴 코드 실행 됨)

 

#무한 루프를 돌면서 스케쥴을 유지한다.
while True:
    schedule.run_pending()
    time.sleep(1)

 

 

 

2. Schedule 모듈 여러 가지 사용 예시

 

  아웃룩 메일 자동화 코드에 적용하려는 부분은 하루에 특정시간 2번 정도만 실행시키려고 한다.(오전 10시, 오후 3시)

매일 특정 시간에 동작, 아니면 일주일 중에 특정 하루만 동작 등의 빈도를 조절하고 싶다면 아래와 같이 작성한다.

 

<예시코드-1>

#1초마다 동작
schedule.every(1).seconds.do(test_function)

#1사간마다 동작
schedule.every(1).hour.do(test_function)

#매일 특정시간에 동작(10:00)
schedule.every().day.at("10:00").do(test_function)

#매주 월요일에 동작
schedule.every().monday.do(test_function)

 

  만약 특정시간이 될 때 프로그램이 종료되게 하려면 sys모듈을 활용해야 한다. 아래 코드의 결과를 보면 22:21에 프로그램이 종료 된 것을 확인할 수 있다.

 

<예시코드-2>

import schedule
import time
import datetime
import sys

#스케쥴 모듈이 동작시킬 코드 : 현재 시간 출력
def test_function():
    now = datetime.datetime.now()
    print("test code- 현재 시간 출력하기")
    print(now)

#프로그램을 종료시키기 위한 함수
def exit():
    print("function exit")
    sys.exit()
    
#1초마다 test_fuction을 동작시키다가 "22:21"이 되면 프로그램 종료
schedule.every(1).seconds.do(test_function)
schedule.every().day.at("22:21").do(exit)


#무한 루프를 돌면서 스케쥴을 유지한다.
while True:
    schedule.run_pending()
    time.sleep(1)

 

<결과>

test code- 현재 시간 출력하기
2021-05-16 22:20:56.176037
test code- 현재 시간 출력하기
2021-05-16 22:20:57.188574
test code- 현재 시간 출력하기
2021-05-16 22:20:58.198366
test code- 현재 시간 출력하기
2021-05-16 22:20:59.212630
function exit

 


참고링크1 : https://lemontia.tistory.com/508

 

[python] 파이썬 스케줄 수행 - schedule, apscheduler

특정시간마다 배치를 돌릴 수 있는 기능이 필요해서 스케줄링을 찾아보다가 2개를 발견했습니다. 1) schedule 2) apscheduler 각각의 활용방법에 대해 알아보도록 하겠습니다 1) schedule schedule 는 명령어

lemontia.tistory.com

 

참고링크2 : http://w3devlabs.net/wp/?p=18574 

 

파이썬으로 간단한 스케줄러 만들기 – 웹개발공작소

파이썬을 실행하는 배치파일을 만들어서 스케줄어에서 실행해도되지만 간단한 스케줄러를 어떻게 만드는지 여기서 알아보도록 하겠습니다. 아래는 10초에 한번씩 시간을 출력하고 있습니다. sc

w3devlabs.net

 

728x90