gpt4 book ai didi

python-3.x - 使用 `psutils` 有效地检索所有正在运行的进程的统计信息

转载 作者:行者123 更新时间:2023-12-03 20:29:45 27 4
gpt4 key购买 nike

我正在构建一个实用程序,它使用 Python 3.6.5 检索操作系统(Centos 7)上所有正在运行的进程的信息。

我为此创建了以下函数,使用 psutil :

def get_processes(self):
fqdn = self.get_FQDN()
process_infos = list()
for proc in psutil.process_iter():
proc_info = dict()
with proc.oneshot():
proc_info["pid"] = proc.pid
proc_info["ppid"] = proc.ppid()
proc_info["name"] = proc.name()
proc_info["exe"] = proc.exe() # Requires root access for '/proc/#/exe'
proc_info["computer"] = fqdn
proc_info["cpu_percent"] = proc.cpu_percent()

mem_info = proc.memory_info()
proc_info["mem_rss"] = mem_info.rss

proc_info["num_threads"] = proc.num_threads()
proc_info["nice_priority"] = proc.nice()
process_infos.append(proc_info)
return process_infos

我有一个调用此函数的一秒迭代,在添加它之后,我注意到我的应用程序 CPU 消耗从 ~1% 恶化到 ~10%。
分析器告诉我,我的大部分 CPU 时间都浪费在了 psutil 中。的功能 _parse_stat_file 解析 /proc/<pid>/stat 的内容文件。

根据 psutils文档,建议使用 oneshot()函数以提高收集效率,但正如您所看到的,我已经使用了它。

我在这里做错了吗?还是我注定要 psutils表现不佳?如果是这样,您是否知道其他可以更有效地解决我的问题的实用程序?

最佳答案

psutil 作者在这里。

我怀疑其他工具可以做得更好。读取/proc/pid/stat 是用户空间应用程序获取这些进程信息的唯一方法,因此所有这些信息(ps、top 等)基本上都做同样的事情:读取文件并解析它。因此,我不认为一个会比另一个快得多。

通过使用 oneshot(),您已经告诉 psutil 避免多次读取该文件,因此您可能无法进一步加快速度。考虑到您每秒要求所有正在运行的进程的 7 个统计信息,因此很自然地期望某种开销。如果 top 有类似的 CPU 消耗,我不会感到惊讶。

关于python-3.x - 使用 `psutils` 有效地检索所有正在运行的进程的统计信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51962656/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com