在这篇文章中,我们将探讨如何使用 psutil 和 concurrent.futures 这两个强大的 Python 库来并发获取系统进程信息。
什么是 psutil 和 concurrent.futures?
psutil 是一个跨平台的库,能够轻松获取系统使用的进程和系统利用率(包括 CPU、内存、磁盘、网络等)信息。它主要用于系统监控,分析和限制系统资源以及进程管理。
concurrent.futures 是 Python 的一个高级并发库,它提供了高级异步编程的接口,可以帮助我们更方便地使用多线程和多进程。
如何并发获取系统进程信息?
首先,我们需要安装 psutil。在你的终端或命令提示符中输入以下命令:
pip install psutil
接下来,我们可以开始编写我们的进程信息获取函数。在这个函数中,我们将获取每个进程的名称、CPU 使用率和内存使用率。
import psutil
def get_process_info(process):
try:
process_name = process.name()
process_cpu_usage = process.cpu_percent(interval=1)
process_memory_usage = process.memory_percent()
print("Process Name: {}, CPU Usage: {}%, Memory Usage: {}%".format(process_name, process_cpu_usage, process_memory_usage))
except psutil.AccessDenied:
pass
现在,我们可以使用 concurrent.futures 来并发获取所有进程的信息:
from concurrent.futures import ThreadPoolExecutor
import time
# 获取所有进程的信息
all_processes = list(psutil.process_iter())
# 使用线程池并发获取进程信息
start_time = time.time()
with ThreadPoolExecutor() as executor:
results = executor.map(get_process_info, all_processes)
end_time = time.time()
# 打印运行时间
print("Time taken: {:.2f} seconds".format(end_time - start_time))
这段代码将打印出每个进程的名称、CPU 使用率和内存使用率,并在最后打印出并发获取所有进程信息所花费的时间。
代码解析
-
导入库:
import psutil from concurrent.futures import ThreadPoolExecutor import time
这里我们导入了 psutil 库用于获取系统进程信息,导入 concurrent.futures 库用于并发处理,导入 time 库用于计算运行时间。
-
定义函数:
def get_process_info(process): try: process_name = process.name() process_cpu_usage = process.cpu_percent(interval=1) process_memory_usage = process.memory_percent() print("Process Name: {}, CPU Usage: {}%, Memory Usage: {}%".format(process_name, process_cpu_usage, process_memory_usage)) except psutil.AccessDenied: pass
定义一个名为
get_process_info
的函数,接受一个进程对象process
作为参数。获取进程的名称、CPU 使用率和内存使用率,并打印这些信息。如果访问被拒绝,则跳过该进程。 -
获取所有进程的信息:
all_processes = list(psutil.process_iter())
使用
psutil.process_iter()
获取所有进程的迭代器,并将其转换为列表。 -
使用线程池并发获取进程信息:
start_time = time.time() with ThreadPoolExecutor() as executor: results = executor.map(get_process_info, all_processes) end_time = time.time()
使用
ThreadPoolExecutor
创建一个线程池,并使用executor.map
并发执行get_process_info
函数,传入所有进程对象。记录开始和结束时间以计算运行时间。 -
打印运行时间:
print("Time taken: {:.2f} seconds".format(end_time - start_time))
打印并发获取所有进程信息所花费的时间。
import psutil
from concurrent.futures import ThreadPoolExecutor
import time
def get_process_info(process):
try:
process_name = process.name()
process_cpu_usage = process.cpu_percent(interval=1)
process_memory_usage = process.memory_percent()
print("Process Name: {}, CPU Usage: {}%, Memory Usage: {}%".format(process_name, process_cpu_usage, process_memory_usage))
except psutil.AccessDenied:
pass
# 获取所有进程的信息
all_processes = list(psutil.process_iter())
# 使用线程池并发获取进程信息
start_time = time.time()
with ThreadPoolExecutor() as executor:
results = executor.map(get_process_info, all_processes)
end_time = time.time()
# 打印运行时间
print("Time taken: {:.2f} seconds".format(end_time - start_time))
运行结果
运行上述代码后,你将会在控制台中看到每个进程的名称、CPU 使用率和内存使用率,并在最后看到并发获取所有进程信息所花费的时间。
效果图:
其他文章推荐
- Python 文件搜索程序详解与实现-CSDN博客
- 在 Python 中编写一个简单的文件搜索工具-CSDN博客
- 在Python中打印所有ASCII字符-CSDN博客
- Python 创建一个简单的在线聊天系统-CSDN博客
- 使用 Python和moviepy库 将MP4视频 文件转换为GIF动画-CSDN博客
相关类型推荐
- 使用Python进行系统监控
- Python中的并发编程
结论
通过这个简单的例子,我们可以看到 psutil 和 concurrent.futures 是如何帮助我们并发获取系统进程信息的。无论你是在进行系统监控,还是在分析系统资源使用情况,这两个库都可以成为你的强大工具。
总结
通过本文的学习,你应该已经掌握了如何使用 psutil 和 concurrent.futures 并发获取系统进程信息。如果你有任何问题或建议,请在评论区留言。