1

我在 R 中大量使用 foreach dopar 来利用多核来加快在交互式会话中进行临时分析的速度。

但是我有时注意到,如果我通过按 control-c 从并行化的 for 循环中跳出(通常是当我意识到我在工作线程中出现问题时),会话将在我使用 foreach 的意义上变得混乱再次使用dopar,事情将仅由一个线程执行(顶部不会像往常一样显示多个进程,而且与并行化工作相比,这项工作需要很长时间)。它不会在每个 control-c 上发生,但频率足以令人讨厌(从全新的会话重新加载会话的所有内容可能很烦人)

有没有办法防止这种情况发生,或者至少有办法在它发生时修复环境?

4

1 回答 1

1

最好的方法是注册你的集群,然后创建一个停止函数,如果你退出进程,它将自动处理核心。

myClusters <- makeCluster(4) #the number should reflect your system and project
registerDoParallel(myClusters)

你可以使用类似的东西

on.exit(stopCluster(myCluster))

如果你这样设置,那么退出时应该没问题。您可能需要运行

gc()在控制台中取出杂物......

于 2016-08-05T13:01:25.803 回答