我正在使用Python进行多重处理。例如,请考虑Python多处理文档中给出的示例(在本示例中,我将100更改为1000000,只是为了浪费更多时间)。当我运行此命令时,我确实看到Pool()正在使用所有4个进程,但是我看不到每个CPU都可以移动到100%。如何使每个CPU的使用率达到100%?
from multiprocessing import Pool
def f(x):
return x*x
if __name__ == '__main__':
pool = Pool(processes=4)
result = pool.map(f, range(10000000))
这是因为multiprocessing
在后台需要在主进程和工作进程之间进行进程间通信,并且通信开销比x * x
您实际情况中的“实际”计算()花费了更多的时间。
尝试使用“较重”的计算内核,例如
def f(x):
return reduce(lambda a, b: math.log(a+b), xrange(10**5), x)
我指出,OP观察到的CPU使用率低是由于其固有的IPC开销,multiprocessing
但是OP不必为此担心太多,因为原始的计算内核太“轻”了,无法用作基准。
。换句话说,multiprocessing
通过“太轻”内核的这种方式工作最差。我保证,如果OPx * x
在之上实现现实世界的逻辑(我敢肯定,这会比“更重”
)multiprocessing
,那么OP将实现不错的效率。我的论证得到了我提出的“重”内核的实验的支持。
@FilipMalczak,我希望我的澄清对您有意义。
顺便说有提高效率的一些方法x * x
同时使用multiprocessing
。例如,Pool
除非需要实时解决每个作业,否则我们可以将1,000个作业合并为一个作业(例如,如果您实现REST
API服务器,则不应该这样做)。
问题内容: 我能否查看当前python应用程序正在使用的处理器使用量(占最大值的百分比)? 场景:只要不消耗超过X%的CPU能力,我的主机就可以允许我运行我的应用程序,因此我希望它“关注自身”并放慢速度。那么我如何知道该应用程序使用了多少CPU? 目标平台是* nix,但是我也想在Win主机上进行。 问题答案: 从(2.5)手册中: 次() 返回一个五元组的浮点数,以秒为单位指示累计(处理器或其他
Per-cpu 变量是一项内核特性。从它的名字你就可以理解这项特性的意义了。我们可以创建一个变量,然后每个 CPU 上都会有一个此变量的拷贝。本节我们来看下这个特性,并试着去理解它是如何实现以及工作的。 内核提供了一个创建 per-cpu 变量的 API - DEFINE_PER_CPU 宏: #define DEFINE_PER_CPU(type, name) \ DEFINE_
基于每个JVM的CPU核数创建线程与在多个JVM上运行的线程在CPU核数上创建线程数,条件是所有JVM运行在共享同一CPU的一个物理系统上有何不同?换句话说,一个并行运行8个线程的多线程Java程序vs在共享同一CPU的8个不同JVM上运行的同一多线程程序? 下面我给出了一些我发现的用线程实现并行处理的方法,但是我不能理解它们之间的本质区别? 方法一:线程周期性地查询数据库更改,并行地启动(长时间
我不太理解参数。在我看来,“任务”对应于执行器中的“线程”或“进程”。假设我将“spark.task.cpus”设置为2。 > 线程如何同时使用两个CPU?它不会需要锁并导致同步问题吗? 我正在查看部署/执行器/Executor.scala中的函数,在这里我看不到任何“每个任务的cpu数量”的概念。那么Spark最终在哪里/如何在独立模式下为任务分配多个cpu呢?
我写了一个简单的程序,在一个循环中执行一堆NOP指令,令我惊讶的是,它每秒执行大约106000000000条指令,或大约10Ghz,而我的CPU只有2.2GHz。 这怎么可能?CPU是将它们视为单个兆NOP,还是我刚刚发现“指令级并行性”是什么意思? 每秒指令的更好衡量标准是什么?添加指令仅达到414900000/s,是我CPU报告的bogomips的十分之一:4390.03 C代码: 编译的程序
问题内容: 我有一个Web应用程序,并且我想为每个用户使用不同的日志,因此我可以了解该用户在系统上所做的事情的“历史记录”。 这是我到目前为止所拥有的: 问题是,作为Web应用程序,它是多线程的,所以AFAIK我不能一直使用并根据我要登录的用户来更改附加程序。我认为我应该为每个用户创建不同的内容,但这是正确的吗? 问题答案: 尝试切换到logback(log4j的后继者)。它带有一个Sifting
问题内容: 有没有办法为特定的浏览器加载不同的CSS文件? 像(伪代码差): 问题答案: 您想要的理想解决方案不存在: 不幸的是,如果您尝试在HTML本身上进行操作,则不存在跨浏览器解决方案。但是,它将适用于大多数版本的IE。像这样: 所以最好的解决方案是: 这样的Javascript解决方案怎么样:浏览器检测。阅读有关此类的内容以更好地弄清该文件的基本作用,就是这样的概念: 显然,它不仅可以检测
问题内容: 我正在尝试在运行mako内核的Nexus 4的所有cpus上设置性能监视器用户模式启用寄存器。 现在,我在可加载模块中设置寄存器: 问题是on_each_cpu仅在Online cpus上运行该功能,如printk语句所示: 当我调用on_each_cpu时,只有四个在线。所以我的问题是,如何强制cpu联机,或者如何强制某个cpu执行代码?谢谢 问题答案: 你并不需要运行在每个CPU的