【发布时间】:2018-03-25 23:53:36
【问题描述】:
我想集成一个并行处理以使我的 for 循环运行得更快。
但是,我注意到它让我的代码运行速度变慢了。请参阅下面的示例,其中我在随机整数列表中使用joblib 和一个简单的函数。请注意,没有并行处理比有运行得更快。
对正在发生的事情有任何见解吗?
def f(x):
return x**x
if __name__ == '__main__':
s = [random.randint(0, 100) for _ in range(0, 10000)]
# without parallel processing
t0 = time.time()
out1 = [f(x) for x in s]
t1 = time.time()
print("without parallel processing: ", t1 - t0)
# with parallel processing
t0 = time.time()
out2 = Parallel(n_jobs=8, batch_size=len(s), backend="threading")(delayed(f)(x) for x in s)
t1 = time.time()
print("with parallel processing: ", t1 - t0)
我得到以下输出:
without parallel processing: 0.0070569515228271484
with parallel processing: 0.10714387893676758
【问题讨论】:
-
并行处理涉及额外的开销,因为设置更复杂。您通常不希望将需要几微秒才能完成的任务并行化。
-
我也在比较复杂的模糊匹配函数上试了一下,还是花了很长时间
-
如果确实愿意了解发生了什么以及如何加快处理速度,请务必阅读上述链接中的论证和测试结果。 [并行]-调度不会免费带来加速,因此请让自己大量学习以性能为导向的设计技巧,并大量测试实际的附加成本与潜在的性能提升。 确实是一个激动人心的领域。
标签: python list loops parallel-processing joblib