Help us understand the problem. What is going on with this article?

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

目次

  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アニメで簡単に作ろう

Q-Yeah
Algorithms are not arbiters of objective truth and fairness simply because they're math.
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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした