Python joblib.Parallel是否保持传递数据的原始顺序?

Python joblib.Parallel是否保持传递数据的原始顺序?,python,multiprocessing,joblib,Python,Multiprocessing,Joblib,我想问和你一样的问题 对于joblib。例如: Parallel(n_jobs=2)(delayed(sqrt)(i ** 2) for i in x) 语法暗示了这一点,但我总是担心并行处理输出的顺序,我不想基于未记录的行为进行编码。您可以将后端指定为多处理,它基于多处理.Pool。然后,另一个答案将适用于结果实际上是有序的 Parallel(n_jobs=2, backend="multiprocessing")(delayed(sqrt)(i ** 2) for i in x) 然而,

我想问和你一样的问题 对于joblib。例如:

Parallel(n_jobs=2)(delayed(sqrt)(i ** 2) for i in x)
语法暗示了这一点,但我总是担心并行处理输出的顺序,我不想基于未记录的行为进行编码。

您可以将
后端
指定为
多处理
,它基于
多处理.Pool
。然后,另一个答案将适用于结果实际上是有序的

Parallel(n_jobs=2, backend="multiprocessing")(delayed(sqrt)(i ** 2) for i in x)

然而,默认情况下,他们使用的是,它并不立即清晰,但可以通过执行测试来检测;DR-它保留了两个后端的顺序

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)
扩展@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)