# coding=gbk
# https://blog.csdn.net/lqy845650069/article/details/117321971
import os
import time
import yagmail
from loguru import logger
def gpu_info():
gpu_status = os.popen('nvidia-smi | grep %').read().split('|')
# gpu_memory1 = int(gpu_status[2].split('/')[0].split('M')[0].strip())
# gpu_memory2 = int(gpu_status[6].split('/')[0].split('M')[0].strip())
# gpu_memory3 = int(gpu_status[10].split('/')[0].split('M')[0].strip())
# gpu_memory4 = int(gpu_status[14].split('/')[0].split('M')[0].strip())
# gpu_memory5 = int(gpu_status[18].split('/')[0].split('M')[0].strip())
# gpu_memory6 = int(gpu_status[22].split('/')[0].split('M')[0].strip())
gpu_memory7 = int(gpu_status[26].split('/')[0].split('M')[0].strip())
gpu_memory8 = int(gpu_status[30].split('/')[0].split('M')[0].strip())
# 这里如果是对8张卡进行监视,就可以都取消注释,同时return返回的也需要是8个卡的gpu状态
# return gpu_memory1, gpu_memory2, gpu_memory3, gpu_memory4, gpu_memory5, gpu_memory6, gpu_memory7, gpu_memory8
return gpu_memory7,gpu_memory8
#如果gpu的空闲大于2个G,就发送邮件提醒
while 1:
print('current time: ', time.asctime())
tmp = gpu_info()
for i in range(0, len(tmp)):
print("gpu[%d] memory usage: %d\n" % (i, tmp[i]))
if min(tmp) < 2000:
index = tmp.index(min(tmp))
yagmail_server = yagmail.SMTP(user="xxxxxx@qq.com", password="yyyyyyy", host="smtp.qq.com")
# 密码填入生成的授权码 yyyyyyyy
email_name = ["zzzzzzzz@qq.com"]
email_title = ["服务器GPU有空啦!"]
email_content = ["got gpu %d available !" % index]
yagmail_server.send(to=email_name, subject=email_title, contents=email_content)
yagmail_server.close()
logger.info("邮件发送完毕!")
break
time.sleep(180)