이전 포스팅에서 아웃룩 메일의 첨부 파일을 자동으로 취합하는 코드를 작성한 적이 있다.
(관련 포스팅 : 2021.04.28 - [코딩/Project] - [Python/파이썬] Outlook 메일 첨부 엑셀파일의 내용 자동 취합하기)
실제 실무에 쓰기 위한 컨셉으로 내가 실제 동작시키는 것이 아닌 코드상에서 특정 시간이 되면 알아서 동작하여 메일의 첨부파일이 자동으로 취합되는 코드를 작성하려고 한다. 찾아보니 파이썬에는 스케쥴링이라는 모듈이 있는데 이 모듈을 사용하면 특정시간에 파이썬 코드를 동작시킬 수 있다.
꼭 내가 하려는 부분이 아니더라도 웹 크롤링같이 주기적으로 정보를 얻어와야할 때 스케쥴 모듈을 사용하면 다양하게 활용할 수 있을 것 같다.
일단 schedule 모듈은 내장 모듈이 아니기에 pip install을 통해 설치해준다.(pip install schedule)
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
참고링크2 : http://w3devlabs.net/wp/?p=18574
'코딩 > Python' 카테고리의 다른 글
[Python/파이썬] 파이썬에서 엑셀 VBA 실행시키기 - xlwings 모듈 (1) | 2021.06.06 |
---|---|
[Python/파이썬] 엑셀 VBA에서 파이썬 코드 실행시키기 - xlwings 모듈 (1) | 2021.06.06 |
[Python/파이썬] Pandas Dataframe 결합 : Merge (0) | 2021.04.25 |
[Python/파이썬] Pandas Dataframe 결합 : Concat (0) | 2021.04.24 |
[Python/파이썬] Pandas 기초 정리 : 엑셀 파일(.xlsx) Dataframe으로 만들기, Datarame을 다시 엑셀파일(xlsx)로 저장하기 (0) | 2021.04.01 |