Параллельный бэкэнд R: Что происходит, когда один процесс сталкивается с исключением?

Я использую foreach + %dopar% добиться параллелизма по нескольким ядрам. Я знаю, что некоторые задачи будут сталкиваться с исключениями. Когда возникает исключение:

  1. Будут ли завершены оставшиеся задачи, которые уже были запущены параллельно?
  2. Будут ли запланированные и в конечном итоге задачи, которые не были запланированы (я не знаю, правильный ли это срок)? Если да, сможет ли он по-прежнему использовать все ядра?

Я попытался найти ресурсы по этому вопросу, но не смог найти ни одного. Похоже, я использую неправильные ключевые слова. Если у вас есть какие-либо ресурсы, пожалуйста, направьте меня к ним.

1 ответ

Решение

Есть параметр в foreach называется .errorhandlingможет иметь значения stop (дефолт), remove или же pass, их поведение таково:

  1. stop: Функция будет остановлена.
  2. remove: Результат этой конкретной задачи не будет возвращен.
  3. pass: Объект ошибки будет включен в результаты.

Таким образом, при рассмотрении вашего конкретного вопроса, если у вас есть много задач, выполняющихся параллельно, и одна из задач на одном работнике вызвала исключение, тогда он остановит процесс и перейдет к следующей задаче "по расписанию" (то есть из-за значения по умолчанию stop). Другая задача будет продолжаться в обычном режиме параллельно.

Пожалуйста, смотрите этот ответ, который лучше объясняет, как обрабатываются ошибки в foreach а также %dopar%,

Надеюсь, это немного прояснит вашу проблему.

Другие вопросы по тегам