如何在不搞乱会话的情况下阻止foreach%dopar%

时间:2016-08-04 20:57:29

标签: r foreach doparallel

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

但是我注意到有时候如果我从并行化的for循环中突破(通常当我意识到我在工作线程中出现了错误)时按下control-c,会话将被搞砸了,当时我再次使用foreach dopar,事情将只由一个线程执行(顶部不会像往常一样显示多个进程加上与并行化工作相比,工作将需要很长时间)。它不会发生在每个control-c上,但频繁到令人讨厌(重新加载会话从一个全新的会话中获得的一切可能很烦人)

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

1 个答案:

答案 0 :(得分:1)

最好的方法是注册群集,然后创建一个停止功能,在退出流程时自动处理核心。

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

你可以使用像

这样的东西
on.exit(stopCluster(myCluster))

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

控制台中的

gc()可以解决问题......