foreach并行循环仅添加print语句才得预期结果,这正常吗?
问题:foreach并行循环中有无print语句导致结果差异是否正常?
我在用foreach做代码并行化处理时发现,循环末尾是否添加print语句会导致输出结果完全不同:
- 添加
print语句时,能得到预期的包含lambda、mtry、nodsize、rmse列的数据框; - 不添加时,仅返回一个只包含"foo"的结果矩阵。
添加print语句的代码及结果
library(foreach) grid <- expand.grid( lambda=c(1,2), mtry=c(1), nodsize=c(1) ) n.cores <- parallel::detectCores() - 1 my.cluster <- parallel::makeCluster(n.cores, outfile = "") doParallel::registerDoParallel(cl = my.cluster) params.all <- foreach (i = 1:nrow(grid), .combine = "rbind") %dopar% { params <- grid[i,] params$rmse <- "foo" print(params) } parallel::stopCluster(cl = my.cluster) params.all
运行结果:
lambda mtry nodsize rmse 1 1 1 1 foo 2 2 1 1 foo
不添加print语句的代码及结果
library(foreach) grid <- expand.grid( lambda=c(1,2), mtry=c(1), nodsize=c(1) ) n.cores <- parallel::detectCores() - 1 my.cluster <- parallel::makeCluster(n.cores, outfile = "") doParallel::registerDoParallel(cl = my.cluster) params.all <- foreach (i = 1:nrow(grid), .combine = "rbind") %dopar% { params <- grid[i,] params$rmse <- "foo" # print(params) LINE COMMENTED } parallel::stopCluster(cl = my.cluster) params.all
运行结果:
[,1] result.1 "foo" result.2 "foo"
请问这种现象是否正常?
内容的提问来源于stack exchange,提问作者umbe1987
相关产品推荐
相关产品推荐

