Python 如何刷新 Psutil 结果?
Python How Do I Refresh Psutil Result?
我正在尝试使 python 脚本每分钟打印 cpu/memory 使用率最高的 5 个进程。但是,cpu 结果在循环时似乎没有改变。
如何在 cpu 循环时获取新的测量值?
我的代码如下。
感谢您的帮助!
import psutil
import time;
from functools import cmp_to_key
def log(line):
print(line)
with open("log.txt", "a") as f:
f.write("{}\n".format(line))
def cmpCpu(a, b):
a = a['cpu']
b = b['cpu']
if a > b:
return -1
elif a == b:
return 0
else:
return 1
def cmpMemory(a, b):
a = a['memory']
b = b['memory']
if a > b:
return -1
elif a == b:
return 0
else:
return 1
def getInfo(pid):
p = psutil.Process(pid)
name = p.name()
cpu = p.cpu_percent()
memory = int(p.memory_info().rss/1024/1024)
return {'name':name, 'cpu':cpu, 'memory':memory}
while True:
localtime = time.localtime(time.time())
timestamp = str(localtime.tm_hour)+":"+str(localtime.tm_min)
log(timestamp)
processes = []
for i in psutil.pids():
processes.append(getInfo(i))
#Sort by cpu usage
processes.sort(key=cmp_to_key(cmpCpu))
for i in range(5):
info = processes[i]
info = info['name']+", "+str(info['cpu'])+"%"
log(info)
#Sort by memory usage
processes.sort(key=cmp_to_key(cmpMemory))
for i in range(5):
info = processes[i]
info = info['name']+", "+str(info['memory'])+"MB"
log(info)
time.sleep(60)
似乎psutil.process_iter就是答案。下面的代码有效。
import psutil
import time;
from functools import cmp_to_key
def log(line):
print(line)
with open("log.txt", "a") as f:
f.write("{}\n".format(line))
def cmpCpu(a, b):
a = a['cpu']
b = b['cpu']
if a > b:
return -1
elif a == b:
return 0
else:
return 1
def cmpMemory(a, b):
a = a['memory']
b = b['memory']
if a > b:
return -1
elif a == b:
return 0
else:
return 1
while True:
localtime = time.localtime(time.time())
timestamp = str(localtime.tm_hour)+":"+str(localtime.tm_min)
log(timestamp)
#Collect information for each process
processes = []
for proc in psutil.process_iter(attrs=['name', 'cpu_percent', 'memory_info']):
processes.append({'name': proc.info['name'], 'cpu': proc.info['cpu_percent'], 'memory': int(proc.info['memory_info'].rss/1024/1024)})
#Sort by cpu usage
log("CPU:")
processes.sort(key=cmp_to_key(cmpCpu))
for i in range(5):
info = processes[i]
info = info['name']+", "+str(info['cpu'])+"%"
log(info)
#Sort by memory usage
log("Memory:")
processes.sort(key=cmp_to_key(cmpMemory))
for i in range(5):
info = processes[i]
info = info['name']+", "+str(info['memory'])+"MB"
log(info)
time.sleep(60)
我正在尝试使 python 脚本每分钟打印 cpu/memory 使用率最高的 5 个进程。但是,cpu 结果在循环时似乎没有改变。
如何在 cpu 循环时获取新的测量值?
我的代码如下。
感谢您的帮助!
import psutil
import time;
from functools import cmp_to_key
def log(line):
print(line)
with open("log.txt", "a") as f:
f.write("{}\n".format(line))
def cmpCpu(a, b):
a = a['cpu']
b = b['cpu']
if a > b:
return -1
elif a == b:
return 0
else:
return 1
def cmpMemory(a, b):
a = a['memory']
b = b['memory']
if a > b:
return -1
elif a == b:
return 0
else:
return 1
def getInfo(pid):
p = psutil.Process(pid)
name = p.name()
cpu = p.cpu_percent()
memory = int(p.memory_info().rss/1024/1024)
return {'name':name, 'cpu':cpu, 'memory':memory}
while True:
localtime = time.localtime(time.time())
timestamp = str(localtime.tm_hour)+":"+str(localtime.tm_min)
log(timestamp)
processes = []
for i in psutil.pids():
processes.append(getInfo(i))
#Sort by cpu usage
processes.sort(key=cmp_to_key(cmpCpu))
for i in range(5):
info = processes[i]
info = info['name']+", "+str(info['cpu'])+"%"
log(info)
#Sort by memory usage
processes.sort(key=cmp_to_key(cmpMemory))
for i in range(5):
info = processes[i]
info = info['name']+", "+str(info['memory'])+"MB"
log(info)
time.sleep(60)
似乎psutil.process_iter就是答案。下面的代码有效。
import psutil
import time;
from functools import cmp_to_key
def log(line):
print(line)
with open("log.txt", "a") as f:
f.write("{}\n".format(line))
def cmpCpu(a, b):
a = a['cpu']
b = b['cpu']
if a > b:
return -1
elif a == b:
return 0
else:
return 1
def cmpMemory(a, b):
a = a['memory']
b = b['memory']
if a > b:
return -1
elif a == b:
return 0
else:
return 1
while True:
localtime = time.localtime(time.time())
timestamp = str(localtime.tm_hour)+":"+str(localtime.tm_min)
log(timestamp)
#Collect information for each process
processes = []
for proc in psutil.process_iter(attrs=['name', 'cpu_percent', 'memory_info']):
processes.append({'name': proc.info['name'], 'cpu': proc.info['cpu_percent'], 'memory': int(proc.info['memory_info'].rss/1024/1024)})
#Sort by cpu usage
log("CPU:")
processes.sort(key=cmp_to_key(cmpCpu))
for i in range(5):
info = processes[i]
info = info['name']+", "+str(info['cpu'])+"%"
log(info)
#Sort by memory usage
log("Memory:")
processes.sort(key=cmp_to_key(cmpMemory))
for i in range(5):
info = processes[i]
info = info['name']+", "+str(info['memory'])+"MB"
log(info)
time.sleep(60)