R并行后端:当一个进程遇到异常时会发生什么?

R parallel backend: What happens when one process faces an exception?

我正在使用 foreach + %dopar% 来实现多核并行。我知道有些任务会面临异常。发生异常时:

  1. 剩下的已经并行启动的任务还能完成吗?
  2. 未安排的任务(我不知道这是不是正确的术语)是否会安排并最终完成?如果是这样,它仍然能够利用所有核心吗?

我试图寻找这方面的资源,但找不到任何资源。看起来我使用了错误的关键字。如果你有任何资源,请告诉我他们。

foreach 中有一个名为 .errorhandling 的参数,它的值可能为 stop(默认)、removepass。他们的行为是这样的:

  1. stop: 将停止该功能。
  2. remove: 不返回此特定任务的结果。
  3. pass: 错误对象将包含在结果中。

所以解决你的具体问题,如果你有很多任务 运行 并行并且一个工作人员中的一个任务引发了异常,那么它将停止进程并将传递到下一个任务 "scheduled"(这是因为默认值 stop)。另一个任务将继续正常并行。

请参阅 this answer,它更好地解释了如何处理 foreach%dopar% 中的错误。

我希望这会澄清你的问题。