gpt4 book ai didi

Python multiprocessing.Pool() 不使用每个 CPU 的 100%

转载 作者:太空狗 更新时间:2023-10-29 22:26:32 24 4
gpt4 key购买 nike

我正在使用 Python 进行多处理。例如,考虑 Python 多处理 documentation 中给出的示例。 (例子中我把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 使用率是由于 multiprocessing 中固有的 IPC 开销,但 OP 不需要太担心它,因为原始计算内核是太“轻”而不能用作基准。换句话说,multiprocessing 使用这种太“轻”的内核时效果最差。如果 OP 在 multiprocessing 之上实现了真实世界的逻辑(我敢肯定,它会比 x * x 更“重”),则 OP 将达到不错的效率,我保证。我提出的“重”内核实验支持了我的论点。

@FilipMalczak,我希望我的解释对你有意义。

顺便说一下,在使用多处理 时,有一些方法可以提高x * x 的效率。例如,我们可以在提交到 Pool 之前将 1,000 个作业合并为一个,除非我们需要实时解决每个作业(即,如果您实现 REST API 服务器,我们不应该这样做以这种方式)。

关于Python multiprocessing.Pool() 不使用每个 CPU 的 100%,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21348746/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com