我需要多次根据相同的数据运行相同的功能。 为此我使用multiprocessing.Pool来加速计算。
from multiprocessing import Pool
import numpy as np
x=np.array([1,2,3,4,5])
def func(x): #this should be a function that takes 3 minutes
m=mean(x)
return(m)
p=Pool(100)
mapper=p.map(multiple_cv,[x]*500)
该程序运行良好,但最后我打开了100个python进程,所有系统都开始变慢。
我该如何解决这个问题? 上午
我以错误的方式使用Pool?我应该使用其他功能吗?
编辑:使用p = Pool(multiprocessing.cpu_count())
我的电脑会100%使用它吗?
或者还有其他我应该使用的东西?
答案 0 :(得分:2)
除了限制自己
p = Pool(multiprocessing.cpu_count())
我相信你在完成后也要做以下事情......
p.close()
这应该在完成后结束该过程。
答案 1 :(得分:1)
作为一般规则,您不需要比CPU内核多得多的池,因为您的计算机将无法将工作并行化,超出可用于实际处理的核心数量。如果你的CPU只能同时处理四件事,那么你有100个进程并不重要。通常的做法是这样做
p = Pool(multiprocessing.cpu_count())