이 글 역시 미디엄 포스팅!
자잘한 이름 오류들도 모두 수정한 완벽..아니 완전한 코드를 갖게 된 모델링을 이제 주기적으로 실행해주기만 하면 됩니다! 그래서 저번 포스팅에서 Crontab을 공부해보는 시간을 갖기도 했죠. 그런데! 두둥-
Crontab은 리눅스 계열에서 사용하는 스케쥴러라, 현재 사내 데스크탑을 외부에서 접속하여 작업하고 있는 저로서는 사용하기 힘들어졌어요. (데탑은 윈도우이기 때문!)
그래서 다른 스케쥴러를 찾다가 발견한 것이 apscheduler! 주피터 노트북 내에서 import만 해주면 되기 때문에 쉽게 사용 할 수 있을 것같았어요. 그럼 같이 설정하러 가실까요?
스케쥴러를 설정하는건 생각보다 간단해요! 코드 몇줄로 설정 가능하답니당.
#Jupyter file1
#패키지 import
from apscheduler.schedulers.blocking import BlockingScheduler
import papermill as pm
#실행하는 함수 지정해주기
def exec_file():
pm.execute_notebook('실행할 주피터 파일', '주피터 파일이 실행되면 결과가 저장될 파일' )
#스케쥴러 변수에 지정
sched = BlockingScheduler()
#스케쥴러에 작업 저장, 주기 지정
#월요일, 목요일 9시에 실행
#테스트는 10초 간격으로 실행
#sched.add_job(exec_file, 'cron', day_of_week='mon,thu', hour='9')
sched.add_job(exec_file, 'interval', second='10')
#작업 실행
sched.start()
다른 작업들과 똑같이 먼저 패키지를 불러와줍니다! 저는 단일작업이기 때문에 apscheduler.schedulers.blocking 을 불러왔는데, 다중작업일 경우 blocking 대신 background 를 불러와야 한다고 하더라구요.
추가로 모델링 코드가 저장된 주피터 파일을 실행시켜주기 위해 papermill 이라는 패키지도 불러와 주었습니당. 그 다음, 주기적으로 실행해줄 작업을 함수로 지정해주고, add_job으로 작업을 추가해준 뒤, start로 실행해주면 끝!
중간에 변수로 지정해준 이유는, BlockingScheduler()를 매번 써주기 힘들기 때문입니다,,^^귀찮아잉
자, 이렇게 스케쥴링이 쉽다는건 알겠는데, 이게 잘 돌아가는지, 확인은 어떻게 하는지! 테스트를 해봐야겠죠? 작업이 주기적으로 잘 돌아간다고 해도, 갑작스럽게 에러가 발생하면 확인할 수 있는 방법도 있어야 하구요. 정말 간단한 코드를 만들어서 스케쥴러가 잘 돌아가는지 확인해보고, 작업이 완료되면 텔레그램으로 메세지가 오도록 하는 텔레그램봇도 설정해봅시다!
테스트 할 코드는, 정말 간단하게,,print(‘test_done’) 으로 하겠습니당. 헬로 월드로 할걸 그랬나? 그리고 이 코드가 스케쥴러에서 작업이 완료되면, Test success 라는 메세지가 오게 설정해줄게요! 텔레그램봇 설정을 추가로 해봅시다!
일단, 메세지를 받아야하니 텔레그램 어플을 다운받아 주시고, 대화상대에서 ‘BotFather’ 를 찾아 말을 걸어 줍니당
프사까지…컨셉 그 자체
저는 새로운 봇을 만들것이기 때문에 /newbot 을 쳐주면,
이렇게 이름을 설정할 수 있는 메세지가 옵니다! 이름을 두번 설정하게 하는데, 첫번째 입력하는 이름은 봇의 이름, 두번째 입력하는 이름은 그 봇의 계정명이라고 생각하면 될 것 같아요. 이렇게 이름을 설정하면 HTTP API 라는걸 알려주는데, 봇을 만들 때 꼭 필요한 키 이기 때문에 꼭 잘 알아두셔야 합니당! 보안을 위해 혹시 몰라 저도 가려놓았어요ㅎㅅㅎ
이렇게 키 까지 받으면, 이제 검색에서 저희가 만든 봇을 찾을 수 있어요!
이 친구에게 한 번 말을 걸면, 이제 사용할 수 있게 돼요! 그럼 다시 주피터 노트북으로 넘어와봅시당.
#Jupyter file2
#텔레그램 모듈 import
import telegram
#토큰 지정
my_token = '토큰을 : 적어주세요'
#봇 선언
bot = telegram.Bot(token = my_token)
#업데이트 내역 받아오기
updates = bot.getUpdates()
#가장 최근에 온 메세지의 id 가져오기
chat_id = bot.getUpdates()[-1].message.chat.id
#메세지 전달
bot.sendMessage(chat_id = chat_id, text="Test Success")
텔레그램봇도, 그리 길지 않은 코드로 지정해줄 수 있어요. 마지막 메세지 전달 코드 전에, 저희가 테스트 하기로 한 print(‘test_done’) 을 넣고, 이 파일 자체를 저장해주면 이제 스케쥴러 테스트 준비 완료!
아직 지치시면 안됩니다..
이제 Jupyter file1의 sched.start() 코드를 실행해주면,
맨 처음에 아무 말이나 보내라고 해서 ~이봐~ 라고,,보낸 나 제법 젠틀해요
이렇게 10초 간격으로 코드가 실행되고, Test Success 메세지가 오게 됩니다! 테스트가 잘 실행되는걸 보니, 모델링 코드를 바로 스케쥴러에 넣어도 될 것 같네요!
월요일과 목요일 9시에 실행되도록 지정하고, 다음 주 월요일에 혹시 오류가 생기지 않는지 잘 확인해봐야 할 것 같습니당. 그럼 오늘도 뿌듯한 마음으로 마무리! 다들 뿌듯한 하루 되슈슉..슈슈슉.슉.슈슉..슈슈슉…슉..
'Dev > python' 카테고리의 다른 글
싸늘하다...가슴에 성적표가 날아와 꽂힌다...한 경기씩 채점하며 지금까지의 적중률을 계산해봅시다! (0) | 2021.10.27 |
---|---|
안녕하세요? 그 저기 데이터 좀 쓸게요(총총총..KBO 데이터 크롤링 해보기! (0) | 2021.10.27 |
역시나 아무도 궁금해하지 않았지만 설명하는 분류모델 평가지표들 (0) | 2021.10.27 |
아무도 궁금해하지 않았지만 설명하는 회귀모델 평가지표들 (0) | 2021.10.27 |
pycaret, 같이 해볼까요? (0) | 2021.10.27 |