【发布时间】:2018-08-27 17:07:12
【问题描述】:
我想编写一个 Python 代码来读取磁盘 IO 和网络 IO 的百分比,就像我们在 Windows 任务管理器中看到的那样。目前我正在使用psutil.disk_io_counters() 和psutil.net_io_counters()。通过这个,我得到 byte read & byte write 用于磁盘 IO 和 byte received & byte sent 用于网络 IO .但我不知道如何将它们转换为百分比。
还观察到disk_io_counters() 和net_io_counters() 没有给出实例值。我已经尝试过link 中提供的建议。但我没有得到想要的价值。我的操作系统是 Windows,但我希望脚本以独立于平台的方式使用。那么,如果不安装任何工具,如iotop 或iostat,是否可以获得我需要的值?我试过以下代码:
import psutil, os
print('Disk: ',psutil.disk_io_counters())
print('Network: ',psutil.net_io_counters())
我还尝试了以下代码来检查 psutil.io_counters() 的使用是否提供了即时磁盘 IO。代码是:
import psutil
import time
for x in range(10):
for proc in psutil.process_iter():
io_counters = proc.io_counters()
disk_usage_process = io_counters[2] + io_counters[3] # read_bytes + write_bytes
print("PID: ", proc.pid, "Disk", disk_usage_process)
print('************************************************************')
time.sleep(1)
但我观察到这些值不是那个时候的。为了证明我已经使用io.counters() 收集了两个系统进程的磁盘 IO,并且看到它在一段时间后以递增的顺序变化。这意味着它正在从进程的开头添加磁盘 IO。以下是截图:
PID: 10068 Disk 1597555 PID: 8608 Disk 99729700
PID: 10068 Disk 1597555 PID: 8608 Disk 99729828
PID: 10068 Disk 1597555 PID: 8608 Disk 99729956
PID: 10068 Disk 1597555 PID: 8608 Disk 99730212
PID: 10068 Disk 1598271 PID: 8608 Disk 99730340
PID: 10068 Disk 1598271 PID: 8608 Disk 99730596
PID: 10068 Disk 1598271 PID: 8608 Disk 99730724
PID: 10068 Disk 1598271 PID: 8608 Disk 99730852
PID: 10068 Disk 1598271 PID: 8608 Disk 99731108
PID: 10068 Disk 1598271 PID: 8608 Disk 99731236
【问题讨论】:
-
将disk_io计数除以磁盘大小和网络字节数除以您的网络容量是一个合理的衡量标准吗?您可以将获得的值与任务管理器中显示的值进行比较以确保
-
您的问题似乎与stackoverflow.com/questions/31860163/… 重复。这是你要找的吗?
-
@raghav710 是的,之前已经提出过这个问题,我也通过提供链接在我的问题中提到了它。但是,在该问题中提供的答案是不够的。因为在这种情况下,磁盘 io 和网络 io 的值不属于该实例。我的意思是当下的价值。没有答案。
-
@raghav710 你能告诉我如何获取磁盘大小吗?还有我的网络容量...
-
@raghav710 抱歉,我误解了这个问题。所以你现在想要你的 disk_io 占 disk_io 的百分比?