前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >bugrobot用6行代码调用微信报警机器人

bugrobot用6行代码调用微信报警机器人

作者头像
lyhue1991
发布2021-11-25 14:51:17
5030
发布2021-11-25 14:51:17
举报

算法工程师常常会为监控代码而头痛,有些代码执行时间常常会长达数小时,甚至几天。

例如一些机器学习模型的训练,以及一些大数据ETL任务。

如果能够将执行过程中的一些中间重要信息发送到我们的微信上,随时随地在手机上看到程序是否正常运行,让一切都在掌握之中,

那么将会让算法工程师的许多头发免受骨肉分离,随风飘零之苦。

实际上我们通过利用Python代码发送邮件到我们的QQ邮箱,并在微信上设置QQ邮箱提醒,可以非常容易实现这个功能。

效果如下,让我们来看看怎么做吧!

一,微信设置QQ邮箱提醒

微信上点击 我->设置->通用->辅助功能->QQ邮箱提醒 开启即可。

二,用Python自动发送邮件

代码语言:javascript
复制
import smtplib
from email.mime.text import MIMEText


subject = "info@train_model.py" #邮件主题
msg = "auc=0.98" #邮件内容
receivers = ["2650115830@qq.com"] #收件人


#设置服务器所需信息
mail_host = 'smtp.yeah.net'  
mail_user = 'PyRobot'  
mail_pass = 'XDNCKUHPLRQFVQHA'   #密码(部分邮箱为授权码) 
sender = 'PyRobot@yeah.net'  


message = MIMEText(msg,'plain','utf-8')  
message['Subject'] = subject
message['From'] = sender     
message['To'] = receivers[0]  

#登录并发送邮件
try:
    smtpObj = smtplib.SMTP() 
    #连接到服务器
    smtpObj.connect(mail_host,25)
    #登录到服务器
    smtpObj.login(mail_user,mail_pass) 
    #发送
    smtpObj.sendmail(
        sender,receivers,message.as_string()) 
    #退出
    smtpObj.quit() 
    print('success')
except smtplib.SMTPException as e:
    print('error',e) #打印错误

三,封装成通用函数

可以将以上代码封装成函数

代码语言:javascript
复制
import smtplib
from email.mime.text import MIMEText

subject = "info@train_model.py" #邮件主题
msg = "auc=0.98" #邮件内容
receivers = ["2650115830@qq.com"] #收件人

def send_msg(receivers,subject,msg=""):
    
    #设置服务器所需信息
    mail_host = 'smtp.yeah.net'  
    mail_user = 'PyRobot'  
    mail_pass = 'XDNCKUHPLRQFVQHA'   #密码(部分邮箱为授权码) 
    NPWPJBSIVXRTYUOB
    sender = 'PyRobot@yeah.net'  

    #构造邮件内容
    message = MIMEText(msg,'plain','utf-8')  
    message['Subject'] = subject
    message['From'] = sender     
    message['To'] = receivers[0]  

    #登录并发送邮件
    try:
        smtpObj = smtplib.SMTP() 
        #连接到服务器
        smtpObj.connect(mail_host,25)
        #登录到服务器
        smtpObj.login(mail_user,mail_pass) 
        #发送
        smtpObj.sendmail(
            sender,receivers,message.as_string()) 
        #退出
        smtpObj.quit() 
        return 'send_msg success'
    except smtplib.SMTPException as e:
        error = 'send_msg error : '+str(e)
        print(error)
        return error
    
send_msg(receivers,subject,msg)

有时候我们的代码执行过程中可能会出现一些预料之外的错误,我们希望能够在出错的第一时间内收到出错的消息和原因,

可以使用traceback捕获异常,并发送报错堆栈到我们的微信上。

代码语言:javascript
复制
import traceback 

try:
    print("train model start")
    x =  100/0
    print("train model start")
except Exception as e:
    error_msg = traceback.format_exc()
    send_msg(["2650115830@qq.com"],"error@train_model.py",error_msg)
    raise e
    

可以将以上代码也封装成函数

代码语言:javascript
复制
import traceback 
def monitor_run(function,receivers):
    try:
        function()
    except Exception as e:
        error_msg = traceback.format_exc()
        send_msg(receivers,"error@"+function.__name__,error_msg)
        raise e
代码语言:javascript
复制
def f():
    return 1/0

代码语言:javascript
复制
monitor_run(f,["2650115830@qq.com"])

四,函数使用范例

上述函数代码已经封装在了python库 bugrobot 文件中了,可以用pip安装使用。

代码语言:javascript
复制
!pip install bugrobot
代码语言:javascript
复制
import  bugrobot

subject = "info@train_model.py" 
msg = "auc=0.98" 
receivers = ["2650115830@qq.com"] 

#①send message to Email!
bugrobot.send_msg(receivers,subject,msg)

#②send the bug information to Email if any exception occor!
def f():
    return 1/0
bugrobot.monitor_run(f,["2650115830@qq.com"])

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-11-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法美食屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一,微信设置QQ邮箱提醒
  • 二,用Python自动发送邮件
  • 三,封装成通用函数
  • 四,函数使用范例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档