快照

Process.oneshot() - 原文

实例的上下文管理器可显著加快同时检索多个进程信息的速度。内部不同的进程信息(例如 name(), ppid(), uids(), create_time(), ...)可以通过使用相同的例程获取,但只返回一个值,其他值被丢弃。当使用上下文管理器时,内部只执行一次(在下面的 name() 示例中),返回感兴趣的值并缓存其他值。共享相同内部例程的后续调用将返回缓存值。 退出上下文管理器块时清除缓存。建议是每次检索有关该进程的多个信息时都使用此方法。 如果很幸运,获取值将会得到极大的加速。 例子:

>>> import psutil
>>> p = psutil.Process()
>>> with p.oneshot():
...     p.name()  # execute internal routine once collecting multiple info
...     p.cpu_times()  # return cached value
...     p.cpu_percent()  # return cached value
...     p.create_time()  # return cached value
...     p.ppid()  # return cached value
...     p.status()  # return cached value
...
>>>

以下是可以利用加速的方法列表,具体取决于使用的平台。在下表中,垂直列表示哪些进程方法可以在某个平台内调用时内部有效地组合在一起。最后一行 (speedup) 显示了将所有方法一起调用时可以获得的加速比的近似值(最佳情况)。

译注: 原文说的是 “horizontal emtpy rows” 水平空行,但根据表格实际内容,应为某个平台对应的垂直列,并且原文的 “The last column” 应该是指最后一行。

LinuxWindowsmacOSBSDSunOSAIX
cpu_num()cpu_percent()cpu_percent()cpu_num()name()name()
cpu_percent()cpu_times()cpu_times()cpu_percent()cmdline()cmdline()
cpu_times()io_counters()memory_info()cpu_times()create_time()create_time()
create_time()memory_info()memory_percent()create_time()--
name()memory_maps()num_ctx_switches()gids()memory_info()memory_info()
ppid()num_ctx_switches()num_threads()io_counters()memory_percent()memory_percent()
status()num_handles()-name()num_threads()num_threads()
terminal()num_threads()create_time()memory_info()ppid()ppid()
-username()gids()memory_percent()status()status()
gids()-name()num_ctx_switches()terminal()terminal()
num_ctx_switches()exe()ppid()ppid()--
num_threads()name()status()status()gids()gids()
uids()-terminal()terminal()uids()uids()
username()-uids()uids()username()username()
--username()username()--
memory_full_info()-----
memory_maps()-----
speedup: +2.6xspeedup: +1.8x / +6.5xspeedup: +1.9xspeedup: +2.0xspeedup: +1.3xspeedup: +1.3x

5.0.0 版本中新增.