说明:该程序能够实时监控服务器的显卡运行情况,当达到设定的条件时,会发送邮件进行通知。建议打开微信邮件助手功能,可以实时收到通知信息。
改代码需要发送邮件部分,按要求写入自己的信息即可。
import pynvml
import time
import sys
import smtplib
from email.mime.text import MIMEText
from email.header import Header
pynvml.nvmlInit()
def send_msg(target_add, msg):
# 发信方的信息:发信邮箱,QQ邮箱授权码
from_addr = ''
password = ''
# 收信方邮箱
# 发信服务器
smtp_server = 'smtp.163.com'
# server = smtplib.SMTP_SSL()
server=smtplib.SMTP_SSL('smtp.163.com')
server.connect(smtp_server,465)
server.login(from_addr, password)
# 发送邮件
message = MIMEText(msg, 'plain', 'utf-8')
server.sendmail(from_addr, target_add, message.as_string())
# 关闭服务器
server.quit()
def watch_nvidia_new(nvidia_ids):
flag = [1 for i in nvidia_ids]
free_space_list = [0, 0]
for i in nvidia_ids:
handle = pynvml.nvmlDeviceGetHandleByIndex(i)
meminfo = pynvml.nvmlDeviceGetMemoryInfo(handle)
free_space = meminfo.free * 1.0 /(1024**3)
free_space_list[i] = free_space
print("Card {} free memory is {:2f}GB".format(i,free_space))
return free_space_list
nvidia_ids = [0,1] # 显卡id
min_memory = 5
while True:
free_space_list = watch_nvidia_new(nvidia_ids)
for i in free_space_list:
if i > min_memory:
send_msg("目标邮箱","系统检测到有一张显卡空闲{:.2f}GB, 未设置自动启动指令,\n".format(i)
+ "请上线查看原因并重新启动!"
+"为防止邮件打扰,本检测程序即将自动停止!")
print("Send email success!")
sys.exit(0)
else:
print("The graphics card is working normally. The program will retest after 60 seconds!")
time.sleep(60)