(附代码)psutil实时监控脚本运行过程中消耗的资源

news/2024/9/27 18:37:39 标签: linux, python

在运行脚本时有时需要监控脚本中各模块 占用的cpu以及memory的情况,一般是执行python xx.py后,另起temernal,输入top命令实时监控,但这个存在一个问题,当脚本运行时间比较久时,一直盯着屏幕 也不合适。

所以,可以在脚本中内置 资源监控代码,将实时资源变化记录到log文件,当脚本运行结束,监控也停止。

话不多说,下面是实际可用的代码:

python">import psutil
import threading
import os 
import time

def main()://自己的函数
    # 在主脚本开头启动监控线程
    monitor_thread = threading.Thread(target=monitor_resources, args=(), daemon=True)
    monitor_thread.start()

    '''下面补充自己的代码'''

def monitor_resources(log_file="record_memory.log", interval=1):
    """
    监控当前脚本的 CPU 核心数和内存使用情况,并将其记录到指定日志文件。
    
    :param log_file: 日志文件路径
    :param interval: 监控间隔(秒)
    """
    process = psutil.Process(os.getpid())
    total_cores = psutil.cpu_count(logical=True)  # 获取总核心数
    
    with open(log_file, "w") as file:
        file.write("Timestamp, CPU %, Memory (GB)\n")
        try:
            while True:
                # 获取 CPU 使用率并转换为使用的核心数
                cpu_usage_percent = process.cpu_percent(interval=0)
                cpu_cores = (cpu_usage_percent / 100) * total_cores
                
                # 获取内存使用情况并转换为 GB
                memory_usage_gb = process.memory_info().rss / (1024 ** 3)

                # 获取当前时间
                timestamp = time.strftime("%Y-%m-%d %H:%M:%S")

                # 记录数据
                file.write(f"{timestamp}, {cpu_cores:.2f}, {memory_usage_gb:.2f}\n")
                file.flush()  # 确保数据立即写入文件

                # 等待下次记录
                time.sleep(interval)
        except KeyboardInterrupt:
            print("监控已停止。")


http://www.niftyadmin.cn/n/5679269.html

相关文章

LCR 007. 三数之和

文章目录 1.题目2.思路3.代码 1.题目 LCR 007. 三数之和 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a ,b ,c *,*使得 a b c 0 ?请找出所有和为 0 且 不重复 的三元组。 示例 1&#xff1a…

【达梦数据库】存储过程统计模式下表信息-SQL改写

背景 在一次Oracle迁移Dm的过程中,源库&目的库大小写均敏感,执行客户提供的SQL脚本的过程中发现,表ip_address被系统默认成了表IP_ADDRESS。 经过分析,客户提供的SQL没有使用双引号,来确保Oracle和Dm数据库按照指…

【多样化的思想】基于执行档案的测试

下面我们讨论另一种关于多样性的观点。我们知道,对被测对象而言,测试输入空间代表的是各种可能的外部环境条件。如果两个测试输入点距离比较远,说明在这两个点上,被测对象所面对的外部环境条件很不一样,所以我们说&…

C++简单缓冲区类设计

目录 1.引言 2.静态缓冲区 3.动态缓冲区 4.数据引用类 5.自动数据引用类 6.几种缓冲区的类关系图 7.注意事项 8.完整代码 1.引言 在C中,设计静态和动态缓冲区类时,需要考虑的主要差异在于内存管理的方式。静态缓冲区类通常使用固定大小的内存区域…

C:数据在内存中的存储

目录 一、整数在内存中的存储 二、大小端字节序 2.1 大小端字节序的介绍 2.2 为什么有大小端之分(了解即可) 2.3 判断大小端的代码实现 三、浮点数的数据存储 3.1 浮点数的存储 3.2 浮点数存储的过程 3.2.1 对于有效数字M 3.2.1 对于指数E 3.3…

前端导出页面PDF

import html2canvas from html2canvas import { jsPDF } from jspdf import { Loading } from element-ui let downloadLoadingInstance// 导出页面为PDF格式---使用插件html2canvas和jspdf插件 export function exportPDF(fileName, node) {downloadLoadingInstance Loading.…

药物临床试验机构备案信息数据库查询方法(支持数据下载)

药物临床试验机构备案管理信息平台是一个由国家药品监督管理局组织建立的系统,该平台向社会开放,提供药物临床试验机构的省份&地区、备案号、机构名称、地址、联系人、联系方式、备案状态、备案专业和主要研究者(专业名称、主要研究者、职称、专业备…

苹果手机如何录屏?IOS 自带工具与嗨格式录屏大师 APP 详解

在当今数字化时代,手机录屏功能变得越来越重要,无论是记录游戏精彩瞬间、制作教学视频,还是分享操作演示,都离不开它。今天,我们就来详细了解一下手机如何录屏视频,重点介绍 IOS 自带录屏工具以及嗨格式录屏…