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
。
任何想法可能是错误的以及如何提高性能?