Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What is going on with this article?
@Q-Yeah

GCP上で動かしている機械学習の処理が終わったらSlackで通知する

More than 1 year has passed since last update.

目次

  1. 概要
  2. SlackでIncoming Webhookの設定をする
  3. 試しにIncoming WebhookのURLへPostしてみる
  4. 実行時間を入れてSlack通知してみる

1. 概要

Kaggle competitionなどで機械学習の処理をしていると何時間も時間を要しますよね。。
ハイスペックなVMだと月額費用も結構な代金になるので、処理が終わったらVMを止めたり別の処理をするために、通知して欲しいあなた!
Slackに処理状況を通知する方法を記載します!

2. SlackでIncoming Webhookの設定をする

SlackのIncoming Webhookの設定画面にアクセス : [Slack] Incoming WebHooks

Screen Shot 2020-02-21 at 13.38.00.png

通知するチャネルを選択

Screen Shot 2020-02-21 at 13.38.48.png

「Add Incoming Webhooks integration」をクリック

Screen Shot 2020-02-21 at 13.39.27.png

下記の赤枠がIncoming WebhookのURLなのでCopyしておく

Screen Shot 2020-02-21 at 12.45.57.png

Slack通知の際の名前を変更 : オプション

Screen Shot 2020-02-21 at 12.47.33.png

Slack通知の際のアイコンを変更 : オプション

Screen Shot 2020-02-21 at 12.49.30.png

問題なければ「Save Settings」をクリック

Screen Shot 2020-02-21 at 12.50.23.png

3. 試しにIncoming WebhookのURLへPostしてみる

slackwebをインストール

Terminal
pip install slackweb

GCP上のJupyterLabでのslackwebインストール例
Screen Shot 2020-02-21 at 12.52.59.png
Screen Shot 2020-02-21 at 12.54.05.png

Postしてみる

# slackwebのmodule import
import slackweb

# SlackのIncoming Webhookの指定
slack = slackweb.Slack(url="SlackのIncoming WebhookのURL") # 自分のURLに書き換えてね

# コメント入れて送信
slack.notify(text="テストだよーーーーーーー")

GCP上のJupyterLabでの例
Screen Shot 2020-02-21 at 12.55.04.png

Screen Shot 2020-02-21 at 12.59.37.png

実行!

確かにリアルタイムに来ていますね!
ezgif-2-8d87a76250d3.gif

4. 実行時間を入れてSlack通知してみる

# 必要なmoduleのimport
import slackweb
import datetime

# Slack通知をクラス化させる
class Slack_notice():
    start = 0

    def __init__(self):
        self.slack = slackweb.Slack(url="SlackのIncoming WebhookのURL") # 自分のURLに書き換えてね

    def begin(self):
        self.start = datetime.datetime.now()
        self.slack.notify(text='[Notice] ' + str(datetime.datetime.now().strftime("%Y-%m-%d %H:%M")) + '\n処理が始まりました !')

    def end(self):
        elapsed_time = datetime.datetime.now() - self.start
        self.slack.notify(text='[Notice] ' + str(datetime.datetime.now().strftime("%Y-%m-%d %H:%M")) + '\n処理が終わりました ! \n所要時間は、'+ str(elapsed_time) + 'です')

# Slack_noticeクラスの呼び出し
slack_notice = Slack_notice()

# 実行前通知
slack_notice.begin()

# 実行したい処理 -------------------------------------------------------------------------
# 今回は分かりやすくするため、1秒ごとにprintするだけの処理にしました
from time import sleep

for num in range(10):
    print(num)
    sleep(1)
# -------------------------------------------------------------------------------------

# 実行前通知
slack_notice.end()

GCP上のJupyterLabでの例
ezgif-2-b0aa5ed4f4ae.gif

参考

[Qiita] Python3でslackに投稿する

[Qiita] Qiitaにアップする画面動画をgifアニメで簡単に作ろう

2
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Q-Yeah
Algorithms are not arbiters of objective truth and fairness simply because they're math.

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
2
Help us understand the problem. What is going on with this article?