我正在从multicore
包(在Ubuntu上)使用mclapply
,并且我正在编写一个函数,要求按顺序返回mclapply(x, f)
的结果(即f(x[1]), f(x[2]), ...., f(x[n])
)。mclapply是否保证按顺序返回结果?
# multicore doesn't work on Windows
require(multicore)
unlist(mclapply(
1:10,
function(x){
Sys.sleep(sample(1:5, size = 1))
identity(x)}, mc.cores = 2))
[1] 1 2 3 4 5 6 7 8 9 10
上面的代码似乎暗示以相同的次序作为该lapply
mclapply
返回结果。但是,如果这个假设是错误的,我将不得不花费很长时间来重构我的代码,所以我希望从更熟悉这个包/并行计算的人那里得到保证,这个假设是正确的。
假设mclapply
始终按顺序返回结果是否安全?无论提供哪些可选参数?
的文档不表明结果可能会在炒,这是明确的,这是一个并行版本的'lapply',它返回排序的列表作为输入。你可以在顺序和并行模式下运行你的代码的一部分,看看这是否适用于你的特定情况。我会冒险猜测它的确如此。 –