我有一个长时间运行的任务(大约3-4个小时),我使用doMC后端和一个foreach (...) %dopar%循环。代码:
registerDoMC(4)
res <- foreach(i=1:n, .combine=function(x,y) rbindlist(list(x,y)), .inorder=FALSE, .errorhandling="stop", .verbose=TRUE) %dopar%
{
# do some stuff with data.table and append row at the end (that's why I use this combine function)
}在执行过程中的某个时刻,并行工作线程的数量减少了:我最初将其设置为4,当我在htop中检查我的进程时,活动工作进程的数量减少到2。在我的foreach结束时,我没有得到任何错误(即使打开了verbose ),所以我完全不知道发生了什么。以前有没有人见过这个问题?(我在Linux btw上运行)。任何帮助都将非常感谢,如果有人提出要求,我很乐意提供更多的信息。
发布于 2020-05-17 00:10:18
如this question中所述,doMC默认情况下会预先安排任务,这可能会导致某些工作人员提前完成任务并处于闲置状态。这个问题的解决方案是一样的:
opts <- list(preschedule=FALSE)
results <- foreach(i=1:10, .options.multicore=opts) %dopar% {
# ...
}https://stackoverflow.com/questions/61835350
复制相似问题