gee*_*eek 7 python pool cpu-usage multiprocessing
我正在使用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))
Run Code Online (Sandbox Code Playgroud)
这是因为multiprocessing需要主进程和幕后工作进程之间的进程间通信,并且通信开销比x * x您的情况下的“实际”计算()花费更多(挂钟)时间。
尝试“更重”的计算内核,例如
def f(x):
return reduce(lambda a, b: math.log(a+b), xrange(10**5), x)
Run Code Online (Sandbox Code Playgroud)
我指出 OP 观察到的低 CPU 使用率是由于固有的 IPC 开销,multiprocessing但 OP 不需要过多担心,因为原始计算内核太“轻”而无法用作基准. 换句话说,multiprocessing使用这种方式太“轻”的内核效果最差。如果 OPx * x在 之上实现现实世界的逻辑(我敢肯定,它会比 更“重” )multiprocessing,我保证,OP 将实现不错的效率。我的论点得到了我提出的“重”内核实验的支持。
@FilipMalczak,我希望我的澄清对您有意义。
顺便说有提高效率的一些方法x * x同时使用multiprocessing。例如,我们可以在提交之前将 1,000 个作业合并为一个,Pool除非我们需要实时解决每个作业(即,如果您实现了 REST API 服务器,我们不应该这样做)。
| 归档时间: |
|
| 查看次数: |
6958 次 |
| 最近记录: |