njob>1 (njob=2完成了12.6s )比njob=1 (1.3s完成)占用了更多的时间用于并行计算。我在MacOSX10.9中,内存为16 am。我是不是搞错了?下面是一个简单的演示代码:
from joblib import Parallel, delayed
def func():
for i in range(200):
for j in range(300):
yield i, j
def evaluate(x):
i=x[0]
j=x[1]
p=i*j
return p, i, j
if __name__ == '__main__':
results = Parallel(n_jobs=3, verbose=2)(delayed(evaluate)(x) for x in func())
res, i, j = zip(*results)发布于 2014-04-06 21:40:05
简短的回答: jobs是一个多处理系统,在为您的3个同时作业启动一个新的python进程时有相当大的开销。因此,如果添加更多的作业,您的特定代码可能会变得更慢。
有一些关于这个这里的文档。
解决办法并不是什么好办法:
也就是说,对于需要很长时间的函数,多处理通常是值得的。取决于您的应用程序,它实际上是一个判断调用。请注意,函数中使用的每个变量都被复制到每个进程变量中--在python中很少有变量复制,因此这可能是一个惊喜。因此,开销部分是显式或隐式传递变量大小的函数(例如。通过使用全局变量)。
https://stackoverflow.com/questions/22648464
复制相似问题