系统资源监控程序的改进

当需要监控硬盘读写和网络传输时,我们可以进一步使用psutil库来获取这些信息。以下是修改后的示例程序,增加了对硬盘读写和网络传输的监控:

import psutil
import json
import timedef get_process_usage():process_list = []for proc in psutil.process_iter(['pid', 'name', 'username', 'cpu_percent', 'memory_percent']):process_info = proc.infoprocess_list.append({'pid': process_info['pid'],'name': process_info['name'],'username': process_info['username'],'cpu_percent': process_info['cpu_percent'],'memory_percent': process_info['memory_percent']})return process_listdef get_system_usage():cpu_percent = psutil.cpu_percent()memory_percent = psutil.virtual_memory().percentdisk_usage = psutil.disk_usage('/').percentnet_io = psutil.net_io_counters()network_usage = {'bytes_sent': net_io.bytes_sent,'bytes_received': net_io.bytes_recv}return {'cpu_percent': cpu_percent,'memory_percent': memory_percent,'disk_percent': disk_usage,'network_usage': network_usage}def main():while True:system_usage = get_system_usage()process_usage = get_process_usage()data = {'system': system_usage,'processes': process_usage}json_data = json.dumps(data, indent=4)# 输出JSON数据print(json_data)# 保存JSON数据到文件with open('system_monitor.json', 'w') as file:file.write(json_data)time.sleep(1)if __name__ == "__main__":main()

需要对JSON进行压缩后再写入文件时,可以使用Python的gzip库来实现。gzip库可以用于对数据进行压缩和解压缩。以下是修改后的示例程序,将JSON数据压缩后再保存到文件

import psutil
import json
import gzip
import timedef get_process_usage():process_list = []for proc in psutil.process_iter(['pid', 'name', 'username', 'cpu_percent', 'memory_percent']):process_info = proc.infoprocess_list.append({'pid': process_info['pid'],'name': process_info['name'],'username': process_info['username'],'cpu_percent': process_info['cpu_percent'],'memory_percent': process_info['memory_percent']})return process_listdef get_system_usage():cpu_percent = psutil.cpu_percent()memory_percent = psutil.virtual_memory().percentdisk_usage = psutil.disk_usage('/').percentnet_io = psutil.net_io_counters()network_usage = {'bytes_sent': net_io.bytes_sent,'bytes_received': net_io.bytes_recv}return {'cpu_percent': cpu_percent,'memory_percent': memory_percent,'disk_percent': disk_usage,'network_usage': network_usage}def main():while True:system_usage = get_system_usage()process_usage = get_process_usage()data = {'system': system_usage,'processes': process_usage}json_data = json.dumps(data, indent=4)# 压缩JSON数据compressed_data = gzip.compress(json_data.encode())# 保存压缩后的数据到文件with gzip.open('system_monitor.json.gz', 'wb') as file:file.write(compressed_data)time.sleep(1)if __name__ == "__main__":main()

若您想监控每个进程对硬盘读写和网络资源的情况,可以对之前的示例程序进行进一步改进。我们可以使用psutil库的io_counters()方法来获取每个进程的硬盘I/O信息,并使用psutil.net_io_counters(pernic=True)来获取每个进程的网络传输信息。以下是修改后的示例程序:

import psutil
import json
import gzip
import timedef get_process_usage():process_list = []for proc in psutil.process_iter(['pid', 'name', 'username', 'cpu_percent', 'memory_percent']):process_info = proc.info# 获取进程的硬盘IO信息和网络IO信息io_counters = proc.io_counters()net_io_counters = psutil.net_io_counters(pernic=True).get(proc.info["username"])process_list.append({'pid': process_info['pid'],'name': process_info['name'],'username': process_info['username'],'cpu_percent': process_info['cpu_percent'],'memory_percent': process_info['memory_percent'],'disk_io': {'read_bytes': io_counters.read_bytes,'write_bytes': io_counters.write_bytes},'network_io': {'bytes_sent': net_io_counters.bytes_sent,'bytes_received': net_io_counters.bytes_recv}})return process_listdef get_system_usage():cpu_percent = psutil.cpu_percent()memory_percent = psutil.virtual_memory().percentdisk_usage = psutil.disk_usage('/').percentnet_io = psutil.net_io_counters()network_usage = {'bytes_sent': net_io.bytes_sent,'bytes_received': net_io.bytes_recv}return {'cpu_percent': cpu_percent,'memory_percent': memory_percent,'disk_percent': disk_usage,'network_usage': network_usage}def main():while True:system_usage = get_system_usage()process_usage = get_process_usage()data = {'system': system_usage,'processes': process_usage}json_data = json.dumps(data, indent=4)# 压缩JSON数据compressed_data = gzip.compress(json_data.encode())# 保存压缩后的数据到文件with gzip.open('system_monitor.json.gz', 'wb') as file:file.write(compressed_data)time.sleep(1)if __name__ == "__main__":main()

当将1、2、3三个功能整合到一起时,我们需要对每个功能的获取数据的部分进行整合,然后将获取的数据合并为一个综合的JSON对象。以下是整合后的示例程序,可以同时监控系统资源、系统传感器数据以及所有进程的CPU和内存资源占用情况,并将结果输出成一个综合的JSON文件:

import psutil
import sensors
import json
import gzip
import timedef get_sensor_data():sensors.init()sensor_data = {}for chip in sensors.iter_detected_chips():for feature in chip:if feature.label:sensor_data[feature.label] = {'value': feature.get_value(),'unit': feature.unit.decode()}sensors.cleanup()return sensor_datadef get_all_processes_usage():process_list = []for proc in psutil.process_iter(['pid', 'name', 'cpu_percent', 'memory_percent']):process_info = proc.infoprocess_list.append({'pid': process_info['pid'],'name': process_info['name'],'cpu_percent': process_info['cpu_percent'],'memory_percent': process_info['memory_percent']})return process_listdef get_system_usage():cpu_percent = psutil.cpu_percent(interval=1)memory_percent = psutil.virtual_memory().percentdisk_io = psutil.disk_io_counters()network_io = psutil.net_io_counters()return {'cpu_percent': cpu_percent,'memory_percent': memory_percent,'disk_io': {'read_bytes': disk_io.read_bytes,'write_bytes': disk_io.write_bytes},'network_io': {'bytes_sent': network_io.bytes_sent,'bytes_received': network_io.bytes_recv}}def main():while True:system_usage = get_system_usage()sensor_data = get_sensor_data()all_processes_usage = get_all_processes_usage()data = {'system': system_usage,'sensor_data': sensor_data,'processes': all_processes_usage}json_data = json.dumps(data, indent=4)# 压缩JSON数据compressed_data = gzip.compress(json_data.encode())# 输出JSON数据print(json_data)# 保存压缩后的数据到文件with gzip.open('system_monitor.json.gz', 'wb') as file:file.write(compressed_data)time.sleep(1)if __name__ == "__main__":main()

在上述程序中,我们分别调用了 get_sensor_data()get_all_processes_usage()get_system_usage() 函数,分别获取系统传感器数据、所有进程的CPU和内存资源占用情况以及系统资源情况。然后,将这些数据合并为一个综合的JSON对象,并输出到控制台并保存到名为 system_monitor.json.gz 的压缩文件中。

请注意,由于系统传感器数据和进程资源占用情况是实时变化的,因此您可能会看到输出在不同时间点有所不同。该程序将不断循环输出数据,您可以手动停止程序的执行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/12759.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决分类任务中数据倾斜问题

大家好,在处理文本分类任务时,基准测试流行的自然语言处理架构的性能是建立对可用选项的理解的重要步骤。在这里,本文将深入探讨与分类相关的最常见的挑战之一——数据倾斜。如果你曾经将机器学习(ML)应用于真实世界的…

React Native RN state props

state: 是RN 专门用来标识是否重新渲染,通过属性的值来更新数据,React 内部会监听 state 的变化,一旦发生变化就会主动触发组件的 render() 方法来更新 Dom 结构,另外state是组件私有的,是没有办法通过其他…

VS+QT+PCL点云显示转网格表面体窗体实现

程序示例精选 VSQTPCL点云显示转网格表面体窗体实现 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<VSQTPCL点云显示转网格表面体窗体实现>>编写代码&#xff0c;代码整洁&…

正则表达式常用字符及案例

引言 正则表达式是一种强大而灵活的工具&#xff0c;它在文本搜索和处理中起到了至关重要的作用。熟练掌握正则表达式的常用字符和使用方法&#xff0c;将能帮助开发者更加高效地进行模式匹配和字符串操作。本文将介绍一些常见的正则表达式字符&#xff0c;并给出一些实际案例…

watch避坑,使用computed进行处理数据

业务场景&#xff1a;在vue中监听el-input 中的字数有没有超过60&#xff0c;如果超过60字时将60后面的字变为 “>>” 符号&#xff0c;以此实现预览苹果手机推送摘要场景。 错误&#xff1a;开始的逻辑是使用watch监听&#xff0c;检查length超过60直接 加上符号&#x…

python 网络编程

TCP编程 客户端 创建TCP连接时&#xff0c;主动发起连接的叫做客户端&#xff0c;被动响应的叫做服务端。当定义一个Socket表示打开一个网络连接&#xff0c;创建一个Socket需要知道目标计算机的IP地址和端口号和对应的协议类型。 # 导入socket库: import socket# 创建一个s…

基于MSP432P401R爬坡小车【2020年电赛C题】

文章目录 一、任务清单1. 硬件部分2. 软件部分 二、OpenMV巡线三、舵机转向四、停止线识别五、技术交流 一、任务清单 1. 硬件部分 主控板&#xff1a; MSP432P401R数据显示&#xff1a; OLED电机&#xff1a; 霍尔编码器电机电池&#xff1a; 7.3V航模电池巡线&#xff1a; …

图像中不规则物体的长轴与短轴:OpenCV实现指南

1.首先&#xff0c;读取图像并将其转换为灰度图像。 2.进行图像预处理&#xff0c;包括使用高斯模糊和阈值化&#xff0c;以便更好地处理图像。 3.通过使用OpenCV的cv2.findContours()函数&#xff0c;找到图像中的所有轮廓。 4.遍历所有轮廓&#xff0c;如果轮廓点的数量大…

使用ajax进行前后端交互的方法

使用ajax进行前后端交互的方法&#xff1a;&#xff08;我只测试通了json对象作为参数的方式&#xff0c;其他方式我没有测试通过&#xff09; 1、前端方法&#xff1a; 传参方式&#xff1a;POST 请求类型&#xff1a;json对象 响应类型&#xff1a;json对象 function test() …

idea 里 controller service impl mapper xml 切换跳转快捷键

首先在controller层&#xff0c;对着接口点方法的方法上按着ctrl和鼠标左键&#xff0c;你会进入service层。 对着方法ctrlaltb不按鼠标&#xff0c;你会进入impl层。service层的方法上按ctrl和鼠标左键会回到controller&#xff0c;ctrlaltb不按鼠标也会进入到impl层,impl上的…

[Linux]线程基本知识

概念 进程 一个正在执行的程序&#xff0c;它是资源分配的最小单位 进程中的事情需要按照一定的顺序逐个进行 进程出现了很多弊端: 一是由于进程是资源拥有者&#xff0c;创建、撤消与切换存在较大的时空开销&#xff0c;因此需要引入轻型进程&#xff1b; 二是由于对称多…

localhost和127.0.0.1一样吗?

学习笔记&#xff0c;如有错误&#xff0c;感谢指出&#xff01; 文章目录 1. 对比方式一1.1 表示方式&#xff1a;1.2 主机名解析&#xff1a;1.3 IPv6 支持&#xff1a;1.4 可读性和易用性&#xff1a;1.5 小总结 2. 对比方式二2.1 原理不同2.2 概念不同2.3 指向不同 1. 对比…

C++:类和对象(下)---对类和对象深入一些的理解

文章目录 构造函数&#xff1f;初始化列表explicit关键字 匿名对象 构造函数&#xff1f; 初始化列表 前面已然介绍过构造函数&#xff0c;但并未完全结束&#xff0c;构造函数有很多种写法&#xff0c;有带缺省参数的&#xff0c;有全缺省的&#xff0c;不带缺省参数的…但用…

未来的算法备案法规:创新和安全如何兼顾?

随着科技的快速发展&#xff0c;算法正逐步渗透到我们生活的各个方面&#xff0c;从推荐引擎到自动驾驶&#xff0c;从医疗诊断到金融交易&#xff0c;这一现象既充满希望&#xff0c;也充满了挑战。其中一个关键的挑战就是如何设计和实施有效的算法备案法规&#xff0c;以促进…

Linux下查找python路径

本地目前装了几个版本的python&#xff0c;这里记录下查找python路径的方法。 1&#xff1a;whereis命令 whereis python2&#xff1a;which命令 which python与whereis相似&#xff0c;但which会返回第一个找到的执行文件的位置。 3&#xff1a;find命令 find命令可以搜索系…

web流程自动化详解

今天给大家带来Selenium的相关解释操作 一、Selenium Selenium是一个用于自动化Web浏览器操作的开源工具和框架。它提供了一组API&#xff08;应用程序接口&#xff09;&#xff0c;可以让开发人员使用多种编程语言&#xff08;如Java、Python、C#等&#xff09;编写测试脚本&…

题目:2206.将数组划分成相等数对

​​题目来源&#xff1a; leetcode题目&#xff0c;网址&#xff1a;2206. 将数组划分成相等数对 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 先对数组进行排序&#xff0c;然后判断从第 2i 个 与 第 2i1 个元素是否全部相等即可&#xff08;i0,1,2,3,4..…

需求分析案例:消息配置中心

本文介绍了一个很常见的消息推送需求&#xff0c;在系统需要短信、微信、邮件之类的消息推送时&#xff0c;边界如何划分和如何设计技术方案。 1、需求 一个系统&#xff0c;一般会区分多个业务模块&#xff0c;并拆分成不同的业务系统&#xff0c;例如一个商城的架构如下&am…

webpack基础配置

webpack基础 webpack 处理css兼容问题webpack 处理css闪屏问题webpack 优化压缩css代码总结webpack 两种开发模式webpack 基本的功能webpack配置 5概念devServer 生产环境webpack配置实例开发环境webpack配置实例webpack优化 webpack 处理css兼容问题 下载loader 引入 package…

day45-Netflix Mobile Navigation(左边侧边栏动态导航)

50 天学习 50 个项目 - HTMLCSS and JavaScript day45-Netflix Mobile Navigation&#xff08;左边侧边栏动态导航&#xff09; 效果 index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name&…