因此,我正在创建一个监视功能来监视基准测试过程。
这是功能
def monitor(target):
worker_process = mp.Process(target=target, args=(5, bounds, num_particles, max_iter, None))
worker_process.start()
p = psutil.Process(worker_process.pid)
cpu_percents = []
while worker_process.is_alive():
test = p.cpu_percent()
if test != 0.0:
cpu_percents.append(test)
worker_process.join()
return cpu_percents
cpu_percents = monitor(target=GSO)
我得到了我正在监视的功能的cpu用法,但是cpu percent()/ cpus数大于100,我不知道发生了什么,有人可以解释。
reason why i have divided by number of cpus is given in this post
答案 0 :(得分:0)
来自psutil文档:http://psutil.readthedocs.io/en/latest/#psutil.Process.cpu_percent
返回一个以百分比表示进程CPU利用率的浮点数,如果进程在不同的CPU上运行多个线程,则浮点数也可以> 100.0。
答案 1 :(得分:0)
我在300%左右的CPU使用率方面也遇到了类似的问题,这毫无意义。通过增加间隔时间来解决该问题。这是我的操作方式示例:
import psutil
import pandas as pd
import time
import multiprocessing
def get_running_aps(interval=20):
df = pd.DataFrame(columns=['pid', 'name', 'username', 'status', 'cpu_percent'])
# this is t0 (start of interval)
for proc in psutil.process_iter(['pid', 'name', 'username', 'status', 'cpu_percent']):
pass
# interval time waiting
for i in range(interval):
print("#" * (interval - i))
time.sleep(1)
# measure a second time, now save the results
for proc in psutil.process_iter(['pid', 'name', 'username', 'status', 'cpu_percent']):
df = df.append(proc.info, ignore_index=True)
# divide by the number of cpu's
df.cpu_percent = df.cpu_percent/multiprocessing.cpu_count()
df = df.sort_values(['cpu_percent'], ascending=False)
return df
if __name__ == "__main__":
df = get_running_aps()
print(df.head())