doSNOW考虑以下在带有包的 Windows 操作系统上运行的代码:
result.dt <- foreach(j = 1:nrow(keys),
.combine = function(...) rbindlist(list(...)),
.packages = c('data.table'),
.multicombine = TRUE) %dopar% {
data.select <- data[keys[j], on = colnames(keys)]
foo(data.select)
}
keys有些data.table有大约 2000 行,foo是一个运行相当长的时间(10s - 3m)并返回data.table单行的函数。
当我打开时.verbose = TRUE,我可以看到foo不同内核的功能按预期运行(比如 30m)。但是,在foreach完成所有操作后,代码又消耗了 30m(有时甚至更长)来合并 2000 data.table。
需要注意的另一件事是,当 时verbose = TRUE,它总是显示,numValues: .., numResults: .., stopped: FALSE即使它是结束时foreach。我期待看到stopped: TRUE。
任何想法可能是错误的以及如何提高性能?