【发布时间】:2013-01-19 19:28:23
【问题描述】:
我正在使用 multicore 包中的 mclapply(在 Ubuntu 上),我正在编写一个函数,要求按顺序返回 mclapply(x, f) 的结果(即 f(x[1]), f(x[2]), ...., f(x[n])) .
# 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
上面的代码似乎暗示mclapply 返回结果的顺序与lapply 相同。
但是,如果这个假设是错误的,我将不得不花很长时间重构我的代码,所以我希望从更熟悉这个包/并行计算的人那里得到这个假设是正确的保证。
假设mclapply 总是按顺序返回结果,不管它给出的可选参数是什么,是否安全?
【问题讨论】:
-
文档没有表明结果可能是乱码的,并且明确指出这是
lapply的并行版本,它返回作为输入排序的列表。您可以在顺序和并行模式下运行部分代码,看看这是否适用于您的特定情况。我敢猜测它确实如此。
标签: r parallel-processing multicore