我正在尝试创建一个进程监视器,但是与 Windows 任务管理器相比,我的结果并不准确。
我一直在使用 psutil,当查看整体 CPU 和内存使用情况时似乎工作正常,但是对于单个进程来说似乎不太准确。内存使用始终高于任务管理器,而 CPU 则总是随机的。
我在初始化时使用 self.process = psutil.Process(self.pid)
设置进程,然后每秒调用下面的方法,任务管理器中的进程以恒定的 5.4% 的 CPU 使用率和 130MB RAM 运行,但下面的代码产生了:
CPU: 12.5375
Memory 156459008
CPU: 0.0
Memory 156459008
CPU: 0.0
Memory 156459008
CPU: 0.0
Memory 156459008
CPU: 12.5375
Memory 156459008
CPU: 0.0
Memory 156459008
CPU: 0.0
Memory 156459008
示例代码:
def process_info(self):
# I am calling this method twice because I read the first time gets ignored?
ignore_cpu = self.process.cpu_percent(interval=None) / psutil.cpu_count()
time.sleep(0.1)
process_cpu = self.process.cpu_percent(interval=None) / psutil.cpu_count()
# I also tried the below code but it was much worse than above
# for j in range(10):
# if j == 0:
# test_list = []
# p_cpu = self.process.cpu_percent(interval=0.1) / psutil.cpu_count()
# test_list.append(p_cpu)
# process_cpu = (sum(test_list)) / len(test_list)
# Memory is about 25mb higher than task manager
process_memory = self.process.memory_info().rss
print(f"CPU: {process_cpu}")
print(f"Memory: {process_memory}")
我是否在错误地使用psutil,或者有更精确的方法来获取数据?