我有一个工作池,它们执行相同的相同任务,我发送每个相同数据对象的不同克隆。然后,我分别为每个进程在工作函数中测量运行时间。
使用一个过程,运行时间为4秒。使用3个进程,每个进程的运行时间最多可达6秒。
随着更复杂的任务,这种增加更加微妙。
我的系统上没有运行其他cpu-hogging进程,并且工作人员不使用共享内存(据我所知)。运行时间是在worker函数内测量的,所以我认为分叉开销不重要。
为什么会这样?
def worker_fn(data):
t1 = time()
data.process()
print time() - t1
return data.results
def main( n, num_procs = 3):
from multiprocessing import Pool
from cPickle import dumps, loads
pool = Pool(processes = num_procs)
data = MyClass()
data_pickle = dumps(data)
list_data = [loads(data_pickle) for i in range(n)]
results = pool.map(worker_fn,list_data)
编辑:虽然我无法发布MyClass()的整个代码,但我可以告诉您它涉及大量的numpy矩阵操作。看起来numpy对OpenBlass的使用可能是某种原因。