텔레그램으로 전달 받았다. ‘작업끝!’
Telegram으로 작업 종료와 결론 전송 받기
ML(Machine Learning) 또는 DL(Deep Learning)를 하다보면 분석이 오래 걸리는 경우가 많다. 한 번 분석하는데 10-20분씩 넘어가면, 이런 작업들을 모아서 한꺼번에 분석을 돌리는 게 낫다. 전체 작업의 예상 소요 시간이 적게는 1-2시간 많게는 일주일 이상이 되기도 한다(복잡한 모형의 베이지언 분석이나 BERT 같은 NLP 모형을 생각해보자). 문제는 중간에 오류가 발생하거나, 뭔가 잘못되어 원하던 작업이 제대로 이루어지지 않는 경우이다.
몇 일 지나고 봤더니 총 20개의 작업 중에서 3번째에서 Error가 발생하여 작업이 중단되거나, 3번째 발생한 논리적 오류가 4-20번째 작업에도 동일하게 적용되었다면?
한 가지 방법은 작업의 중간 결과와 최종 결과를 Telegram으로 보고 받는 것이다.
Telegram bot
Telegram bot의 token과 chat id를 얻는 방법은 다음의 링크에 자세히 설명되어 있다.
링크: Telegram Bot Token 및 Chat Id 얻기
뭔가 부족한 점이 있다고 해도 구글을 통해 쉽게 해결할 수 있을 것이다.
R package telegram.bot
R에서 텔레그램 봇으로 메시지 또는 그림을 전달할 수 있다.
install.packages('telegram.bot')
token & chat_id
먼저 token과 chat_id를 설정해준다.
library(telegram.bot)
bot = Bot(token='843244212:AEEZv3tmARKNUvDDySnAyFdEsF8M1geZewx')
updates = bot$getUpdates()
chat_id = 382059121
메시지
bot$sendMessage(chat_id = chat_id, text = 'I want to say...')
그림 화일
bot$sendPhoto(chat_id = chat_id, photo = 'telegram.png')
결과
종합
어떤 작업이 끝난 후에는 다음과 같은 루틴을 실행하면 될 것이다. 작업이 끝나면 그 결과와 결과 그림을 텔레그램으로 보내준다. 그리고 로컬 컴에서의 beep
소리로 모든 작업은 종료된다. 만약 여러 개의 세부 작업으로 이루어진 큰 작업을 진행한다면, 세부 작업의 결과는 알람 설정이 OFF 되어 있는 채팅 방으로 보내고, 모든 작업이 끝났다는 것은 알람 설정이 ON 되어 있는 채팅방으로 보낸다면, 세부 작업이 끝날 때마다 핸드폰에서 알람이 울리는 것을 막을 수 있다.
library(telegram.bot)
library(ggplot2)
# !!! use your own token here
bot = Bot(token='732212345:BAEYv3qrAQNNDvJEqHacbdeFAE8M0fhVrrz')
updates = bot$getUpdates()
updates
chat_id = 382112342 # !!! use your own chat_id here
## Work or analysis that takes long
sys.sleep(10)
## send message
msg_to_bot = sprintf('Work Finished - Accuracy: %5.2f%%', 0.99*100)
bot$sendMessage(chat_id = chat_id, text = msg_to_bot)
## send picture
my_plot=ggplot(mtcars, aes(x=mpg)) + geom_histogram(bins=5)
ggplot2::ggsave('telegram_result.png', my_plot)
bot$sendPhoto(chat_id = chat_id, photo = 'telegram_result.png')
library(beepr) # install.packages('beepr')
beep()
덧붙여
조금 더 간편하게 함수로 만들어본다면.
tele_msg('Work 1 done')
tele_pic('result.png')
tele_done()
!
# !!! use your own token here
bot = Bot(token='732212345:BAEYv3qrAQNNDvJEqHacbdeFAE8M0fhVrrz')
updates = bot$getUpdates()
updates
chat1_id = 382112342 # !!! use your own chat_id here
chat2_id = 382112451 # !!! use your own chat_id here
tele_msg = function(msg_to_bot, chat_id = chat_id1) {
bot$sendMessage(chat_id = chat_id, text = msg_to_bot)
}
tele_pic = function(fn_photo, chat_id = chat_id1) {
bot$sendPhoto(chat_id = chat_id, photo = fn_photo)
}
tele_done = function(msg_to_bot = 'All is done') {
tele_msg(msg_to_bot, chat_id2)
tele_pic('여자(남자) 친구 사진이나, 좋아하는 연애인 사진?.png', chat_id2)
library(beepr)
beep()
}
## Work or analysis that takes long
sys.sleep(10)
## send message
msg_to_bot = sprintf('Work 1 Finished - Accuracy: %5.2f%%', 0.99*100)
## send picture
my_plot=ggplot(mtcars, aes(x=mpg)) + geom_histogram(bins=5)
ggplot2::ggsave('telegram_result.png', my_plot)
tele_pic('telegram_result.png')
tele_done()
- 참고로 위의
token
과chat_id
는 모두 예시일 뿐, 실제 작동하지 않는다.
Leave a comment