定时查询服务器显存,并邮件通知

1、背景介绍

实验室有多个大佬同时共用一台服务器,每个服务器上有若干块GPU显卡,经常在一台服务器上搭好环境,调好代码,准备跑程序,发现GPU卡已经全被被占了。

2、功能:

  • 定时查询服务器显卡,
  • 若有空卡,则邮件通知。
  • 可以设置通知的时间范围(工作时间8-24时)
  • 可以设置时间间隔

3、安装:

  • 需要安装 python 环境(python3.6),建议使用anaconda。
  • pip install nvidia-ml-py python工具pynvml来实现显卡信息的读取与管理
  • pip install schedule 可以用一个很方便且轻量的第三方库:schedule
  • 利用python工具pynvml来实现显卡信息的读取与管理
#可以根据python版本制定2/3
# python2
pip install nvidia-ml-py2

# python3
pip install nvidia-ml-py3

https://blog.csdn.net/u014636245/article/details/83932090

4、使用

安装完后,直接运行该程序 python filename.py。提醒:可以使用同一个QQ邮箱进行收发

#coding=utf-8
from email.mime.text import MIMEText
from email.header import Header
from smtplib import SMTP_SSL
from pynvml import *
import schedule
import time
import datetime

def mail_fun():

    #qq邮箱smtp服务器
    host_server = 'smtp.qq.com'
    #sender_qq为发件人的qq号码
    sender_qq = '25****75@qq.com'
    #pwd为qq邮箱的授权码
    pwd = ' xh**********bdc' ## xh**********bdc
    #发件人的邮箱
    sender_qq_mail = '25****75@qq.com'
    #收件人邮箱
    receiver = '41****75@qq.com'

    #邮件的正文内容
    mail_content = 'fwq 有卡'
    #邮件标题
    mail_title = 'fwq的邮件'

    #ssl登录
    smtp = SMTP_SSL(host_server)
    #set_debuglevel()是用来调试的。参数值为1表示开启调试模式,参数值为0关闭调试模式
    smtp.set_debuglevel(1)
    smtp.ehlo(host_server)
    smtp.login(sender_qq, pwd)

    msg = MIMEText(mail_content, "plain", 'utf-8')
    msg["Subject"] = Header(mail_title, 'utf-8')
    msg["From"] = sender_qq_mail
    msg["To"] = receiver
    smtp.sendmail(sender_qq_mail, receiver, msg.as_string())
    smtp.quit()

def check_nvi():
    nvmlInit()     #初始化

    #查看设备
    deviceCount = nvmlDeviceGetCount()
    print(datetime.datetime.now())
    for i in range(deviceCount):
        handle = nvmlDeviceGetHandleByIndex(i)
        # print("GPU", i, ":", nvmlDeviceGetName(handle))
        # 查看当前显卡 剩余显存大小pip
        free_info = nvmlDeviceGetMemoryInfo(handle).free / 1024 / 1024
        print("GPU", i, ":", str(free_info)+"M")

        # 剩余显存 大于9000 邮件通知
        if free_info >= 9000:
            # 判断当前时间是否是在 工作时间(工作时间才通知 8-24)
            # 当前时间(第几个小时)
            curr_hour = time.localtime( time.time() ).tm_hour
            if curr_hour >= 8 and curr_hour <=24:
                mail_fun()
            
            break

    #最后要关闭管理工具
    nvmlShutdown()

def job():
    check_nvi()

# 定时任务
schedule.every(30).minutes.do(job) # 每30分钟执行一次
# schedule.every(30).seconds.do(job) # 每10秒执行一次


if __name__ == "__main__":
    # mail_fun()
    
    # check_nvi()

    while True:
        schedule.run_pending() # 运行所有可运行的任务
        time.sleep(1)
    

5、结果

设置的是每隔10秒钟执行一次
在这里插入图片描述
邮箱收到的邮件
在这里插入图片描述

开启与关闭

在这里插入图片描述

参考:https://www.yuque.com/docs/share/d28fc430-e5bf-461b-9181-069d3bacf78d?#

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值