IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python 监控gpu使用情况,若有空闲自动发送邮件 -> 正文阅读

[Python知识库]python 监控gpu使用情况,若有空闲自动发送邮件

需要安装 apscheduler 包 使用方法:

  • 使用qq邮箱

  • 开启smtp服务,自行百度

  • 复制smtp授权码

  • 在同级路径下创建 send_flag 文件,无后缀名,内容只写0(只有一行注意后面不跟换行以及空格等)

  • 填写gpuMonitor.py中 init初始化信息,运行即可使用

可直接下载代码:我的github:Monitor
打个广告:我的个人博客网站:weilian
整体代码如下:

import logging

import smtplib
from email.mime.text import MIMEText
from email.header import Header
from apscheduler.schedulers.blocking import BlockingScheduler

from pynvml import *

logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
    filename='gpuMonitor.log',
    filemode='w')
logger = logging.getLogger(__name__)


class Monitor():

    def __init__(self):
        self.from_addr = "...." # 邮箱 qq邮箱
        self.from_code = "..." # 邮箱 qq smtp授权码
        self.to_addr = ["...", "...", "..."] # 接收邮箱
        self.send_flag = False

    def getGpuInfo(self):
        risk = 10
        infor = {}
        status = False
        status_list = []
        nvmlInit()
        count = nvmlDeviceGetCount()
        for i in range(count):
            handle = nvmlDeviceGetHandleByIndex(i)
            name = nvmlDeviceGetName(handle)
            info = nvmlDeviceGetMemoryInfo(handle)
            infor[str(i)] = '{}-第{}号GPU使用量:{}, 空余:{}M'.format(name.decode('utf-8'), i,
                                                              '%.2f%%' % (100 * info.used / info.total),
                                                              (info.total - info.used) / 1024 / 1024)
            status_list.append(100 * info.used / info.total)
        nvmlShutdown()
        print(status_list)
        for i in status_list:
            if i <= risk:
                status = True
        self.status = status
        self.infor = str(infor)

    def process(self, message_context, receive_email_address, message_subject):
        smtp_server_host = "smtp.qq.com"
        semtp_server_post = "465"

        message = MIMEText(message_context, 'plain', 'utf-8')
        message['From'] = Header(self.from_addr, 'utf-8')
        message['To'] = Header(receive_email_address, 'utf-8')
        message['Subject'] = Header(message_subject, 'utf-8')
        email_client = smtplib.SMTP_SSL(smtp_server_host, semtp_server_post)
        try:
            email_client.login(self.from_addr, self.from_code)
            logger.info(
                "smtp----login sucess,now will send email to {}".format(
                    receive_email_address))
        except Exception as e:
            logger.info(e)
            try:
                logger.info('smtp----login again.....')
                email_client.login(self.from_addr, self.from_code)
                logger.info(
                    "smtp----login sucess,now will send email to {}".format(
                        receive_email_address))
            except Exception as e:
                logger.info(e)
                logger.info(
                    'smtp----sorry,check yourusername or yourpassword not correct or another problem occur'
                )
        else:
            email_client.sendmail(self.from_addr, receive_email_address,
                                  message.as_string())
            logger.info('smtp----send email to {} finish'.format(
                receive_email_address))
        finally:
            email_client.close()


### 设定定时监控
sched = BlockingScheduler()


@sched.scheduled_job('interval', seconds=10)
def main():
    monitor = Monitor()
    monitor.getGpuInfo()
    with open("send_flag", 'r') as f:
        monitor.send_flag = f.readline()

    logger.info("status:{}, send_flag: {}".format(monitor.status, monitor.send_flag))
    print("status:{}, send_flag: {}".format(monitor.status, monitor.send_flag))
    if monitor.status is True and monitor.send_flag == "0":
        message_subject = "产生空余GPU"
        print("产生空余GPU")
        message_context = monitor.infor
        for to_addr in monitor.to_addr:
            receive_email_address = to_addr
            monitor.process(message_context, receive_email_address, message_subject)
            logger.info("产生空余GPU already send to {}".format(to_addr))
        with open("send_flag", 'w') as f:
            f.write("1")

    elif monitor.status is False and monitor.send_flag == "1":
        print("空余GPU已被使用")
        message_subject = '空余GPU已被使用'
        message_context = monitor.infor
        for to_addr in monitor.to_addr:
            receive_email_address = to_addr
            monitor.process(message_context, receive_email_address, message_subject)
            logger.info("空余GPU已被使用 already send to {}".format(to_addr))
        with open("send_flag", 'w') as f:
            f.write("0")


if __name__ == "__main__":
   sched.start()

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-04-30 08:41:12  更:2022-04-30 08:41:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 9:14:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计