使用多处理模块时如何提高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)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用多处理模块时如何提高CPU利用率?

来自分类Dev

如何提高在 for 循环中处理数据帧的 CPU 利用率?

来自分类Dev

如何提高Xen来宾CPU利用率?

来自分类Dev

如何在Windows 8中提高进程的cpu利用率

来自分类Dev

如何在Windows 8中提高进程的cpu利用率

来自分类Dev

CPU使用率及其利用率

来自分类Dev

计算CPU利用率

来自分类Dev

如何获得Akka演员的CPU利用率

来自分类Dev

如何使用Sigar查找Java中的CPU总利用率

来自分类Dev

如何使用Sigar查找Java中的总CPU利用率

来自分类Dev

JavaScript函数将CPU利用率提高到100%

来自分类Dev

GCP Datalab - 将 CPU 利用率提高到 ~100%

来自分类Dev

计算LPAR CPU利用率(AIX)

来自分类Dev

当 CPU 平均利用率超过 90% 达 30 分钟时,如何获得电子邮件警报?

来自分类Dev

尝试使用get-metric-statistics从Lambda从Cloudwatch获取CPU利用率指标时,响应为null

来自分类Dev

如何在批处理脚本中使用WMIC获取内存利用率百分比?

来自分类Dev

Dataproc Worker节点的磁盘利用率日益提高

来自分类Dev

使用Python中的多处理模块提高速度

来自分类Dev

如何确定应用程序内的gc-cpu利用率?

来自分类Dev

如何在终端(Mac)中获得以%为单位的CPU利用率

来自分类Dev

如何从 docker 容器中获取主机信息(CPU 利用率)?

来自分类Dev

使用mvapich2与openmpi比较MPI线程死锁期间的CPU利用率

来自分类Dev

为什么在Prometheus中使用irate或rate计算CPU利用率?

来自分类Dev

PowerShell:使用Proc ID获取进程的处理器利用率

来自分类Dev

在MATLAB中显示CPU内核利用率

来自分类Dev

任务管理器:CPU利用率和速度?

来自分类Dev

在C#中获取当前的CPU利用率

来自分类Dev

检查Linux中cpu利用率的脚本

来自分类Dev

CPU利用率高的原因是什么?

Related 相关文章

  1. 1

    使用多处理模块时如何提高CPU利用率?

  2. 2

    如何提高在 for 循环中处理数据帧的 CPU 利用率?

  3. 3

    如何提高Xen来宾CPU利用率?

  4. 4

    如何在Windows 8中提高进程的cpu利用率

  5. 5

    如何在Windows 8中提高进程的cpu利用率

  6. 6

    CPU使用率及其利用率

  7. 7

    计算CPU利用率

  8. 8

    如何获得Akka演员的CPU利用率

  9. 9

    如何使用Sigar查找Java中的CPU总利用率

  10. 10

    如何使用Sigar查找Java中的总CPU利用率

  11. 11

    JavaScript函数将CPU利用率提高到100%

  12. 12

    GCP Datalab - 将 CPU 利用率提高到 ~100%

  13. 13

    计算LPAR CPU利用率(AIX)

  14. 14

    当 CPU 平均利用率超过 90% 达 30 分钟时,如何获得电子邮件警报?

  15. 15

    尝试使用get-metric-statistics从Lambda从Cloudwatch获取CPU利用率指标时,响应为null

  16. 16

    如何在批处理脚本中使用WMIC获取内存利用率百分比?

  17. 17

    Dataproc Worker节点的磁盘利用率日益提高

  18. 18

    使用Python中的多处理模块提高速度

  19. 19

    如何确定应用程序内的gc-cpu利用率?

  20. 20

    如何在终端(Mac)中获得以%为单位的CPU利用率

  21. 21

    如何从 docker 容器中获取主机信息(CPU 利用率)?

  22. 22

    使用mvapich2与openmpi比较MPI线程死锁期间的CPU利用率

  23. 23

    为什么在Prometheus中使用irate或rate计算CPU利用率?

  24. 24

    PowerShell:使用Proc ID获取进程的处理器利用率

  25. 25

    在MATLAB中显示CPU内核利用率

  26. 26

    任务管理器:CPU利用率和速度?

  27. 27

    在C#中获取当前的CPU利用率

  28. 28

    检查Linux中cpu利用率的脚本

  29. 29

    CPU利用率高的原因是什么?

热门标签

归档