使用多处理模块时如何提高CPU利用率?
我正在Python
3.4中工作,对内存中的分区数据执行朴素的搜索,并试图派生进程以利用所有可用的处理能力。我之所以说是天真的,是因为我敢肯定还有其他一些事情可以做,以提高性能,但是这些潜力超出了当前问题的范围。
我正在测试的系统是Windows 7 x64环境。
我想实现的是在cpu_count() -
1
内核之间进行相对均匀的同时分配(阅读显示由于基线os系统进程,分配给所有内核而不是n-1个内核不会显示任何其他改进)。因此,对于4核计算机,将75%的cpu使用率固定。
我所看到的(使用Windows Task Manager的“性能选项卡”和“进程选项卡”)是, 我从未达到超过25%的系统专用cpu利用率
,并且进程视图显示一次发生一个核,而每隔几个核就进行一次计算分叉过程之间的秒数。
我没有使用代码来计时,但是我很确定我的主观观察是正确的,因为我没有获得我期望的性能提升(i5 3320m达到3倍)。
我尚未在Linux上进行过测试。
根据提供的代码:-如何实现75%的CPU使用率?
#pseudo code
def search_method(search_term, partition):
<perform fuzzy search>
return results
partitions = [<list of lists>]
search_terms = [<list of search terms>]
#real code
import multiprocessing as mp
pool = mp.Pool(processes=mp.cpu_count() - 1)
for search_term in search_terms:
results = []
results = [pool.apply(search_method, args=(search_term, partitions[x])) for x in range(len(partitions))]
-
您实际上并没有在此处同时执行任何操作,因为您正在使用
pool.apply
,它将一直阻塞直到传递给它的任务完成为止。因此,对于中的每个项目partitions
,您都需要search_method
在中的某个进程中运行pool
,等待其完成,然后继续进行下一个项目。这与您在Windows进程管理器中看到的完全吻合。您要pool.apply_async
改为:for search_term in search_terms: results = [] results = [pool.apply_async(search_method, args=(search_term, partitions[x])) for x in range(len(partitions))] # Get the actual results from the AsyncResult objects returned. results = [r.get() for r in results]
或者更好的是,使用
pool.map
(以及functools.partial
将多个参数传递给我们的worker函数的功能):from functools import partial ... for search_term in search_terms: func = partial(search_method, search_term) results = pool.map(func, partitions)
-
确定CPU利用率
2021-02-01 关注 0 浏览127 1答案
-
请编写脚本获取服务器的CPU利用率及内存利用率
2022-03-03 关注 0 浏览40 1答案
-
使用/ proc / stat精确计算Linux中的CPU利用率
2021-02-01 关注 0 浏览98 1答案
-
提高仓库面积利用率就可以提高仓容利用率。( )
2022-05-15 关注 0 浏览16 1答案
-
操作系统采用缓冲技术,通过减少对CPU的()次数,提高资源的利用率。
2022-03-03 关注 0 浏览22 1答案
-
如何在 Windows 和 Linux 上查找哪个线程cpu利用率最高?
2021-11-28 关注 0 浏览102 1答案
-
在某分页系统中,测得CPU的利用率为15%,磁盘利用率为95%,则说明(&...
2022-03-03 关注 0 浏览44 1答案
-
单任务系统中CPU的利用率为多少?
2022-03-03 关注 0 浏览45 1答案
-
使用子网规划能提高IP地址的利用率。( )
2022-05-08 关注 0 浏览15 1答案
-
使用子网规划能提高IP地址的利用率。( )
2022-05-08 关注 0 浏览14 1答案