我在R中使用foreach dopar来充分利用多核来加速在交互式会话中进行临时分析。
但是我注意到有时候如果我从并行化的for循环中突破(通常当我意识到我在工作线程中出现了错误)时按下control-c,会话将被搞砸了,当时我再次使用foreach dopar,事情将只由一个线程执行(顶部不会像往常一样显示多个进程加上与并行化工作相比,工作将需要很长时间)。它不会发生在每个control-c上,但频繁到令人讨厌(重新加载会话从一个全新的会话中获得的一切可能很烦人)
有没有办法防止这种情况发生,或者至少是一种在环境发生时修复环境的方法?
答案 0 :(得分:1)
最好的方法是注册群集,然后创建一个停止功能,在退出流程时自动处理核心。
myClusters <- makeCluster(4) #the number should reflect your system and project
registerDoParallel(myClusters)
你可以使用像
这样的东西on.exit(stopCluster(myCluster))
如果你这样设置,退出时你应该没问题。您可能需要运行
控制台中的 gc()
可以解决问题......