【问题标题】:Does joblib.Parallel keep the original order of data passed?joblib.Parallel 是否保持传递数据的原始顺序?
【发布时间】:2019-11-01 16:46:47
【问题描述】:
【问题讨论】:
标签:
python
multiprocessing
joblib
【解决方案1】:
TL;DR - 它保留了两个后端的顺序。
扩展@Chris Farr 的答案,我实施了一个简单的测试。我让一个函数等待一些随机的时间(您可以检查这些等待时间是否不相同)。我知道每次都保留订单,两个后端都保留。
from joblib import Parallel, delayed
import numpy as np
import time
def f(wait):
time.sleep(wait)
return wait
n = 50
waits = np.random.uniform(low=0, high=1, size=n)
res = Parallel(n_jobs=8, backend='multiprocessing')(delayed(f)(wait) for wait in waits)
np.all(res == waits)
【解决方案2】:
Per the joblib documentation 您可以将backend 指定为multiprocessing,它基于multiprocessing.Pool。然后另一个答案将适用于结果实际上是有序的。
Parallel(n_jobs=2, backend="multiprocessing")(delayed(sqrt)(i ** 2) for i in x)
然而,默认情况下,他们使用loky,虽然不是很清楚,但可以通过实施测试来检测。