首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:执行`foreach`后端为`doMC`的长任务时,并行工作线程的数量减少

R:执行`foreach`后端为`doMC`的长任务时,并行工作线程的数量减少
EN

Stack Overflow用户
提问于 2020-05-16 18:29:44
回答 1查看 23关注 0票数 0

我有一个长时间运行的任务(大约3-4个小时),我使用doMC后端和一个foreach (...) %dopar%循环。代码:

代码语言:javascript
复制
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上运行)。任何帮助都将非常感谢,如果有人提出要求,我很乐意提供更多的信息。

EN

回答 1

Stack Overflow用户

发布于 2020-05-17 00:10:18

this question中所述,doMC默认情况下会预先安排任务,这可能会导致某些工作人员提前完成任务并处于闲置状态。这个问题的解决方案是一样的:

代码语言:javascript
复制
opts <- list(preschedule=FALSE)
results <- foreach(i=1:10, .options.multicore=opts) %dopar% {
    # ...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61835350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档