Параллельный бэкэнд R: Что происходит, когда один процесс сталкивается с исключением?
Я использую foreach
+ %dopar%
добиться параллелизма по нескольким ядрам. Я знаю, что некоторые задачи будут сталкиваться с исключениями. Когда возникает исключение:
- Будут ли завершены оставшиеся задачи, которые уже были запущены параллельно?
- Будут ли запланированные и в конечном итоге задачи, которые не были запланированы (я не знаю, правильный ли это срок)? Если да, сможет ли он по-прежнему использовать все ядра?
Я попытался найти ресурсы по этому вопросу, но не смог найти ни одного. Похоже, я использую неправильные ключевые слова. Если у вас есть какие-либо ресурсы, пожалуйста, направьте меня к ним.
1 ответ
Есть параметр в foreach
называется .errorhandling
может иметь значения stop
(дефолт), remove
или же pass
, их поведение таково:
stop
: Функция будет остановлена.remove
: Результат этой конкретной задачи не будет возвращен.pass
: Объект ошибки будет включен в результаты.
Таким образом, при рассмотрении вашего конкретного вопроса, если у вас есть много задач, выполняющихся параллельно, и одна из задач на одном работнике вызвала исключение, тогда он остановит процесс и перейдет к следующей задаче "по расписанию" (то есть из-за значения по умолчанию stop
). Другая задача будет продолжаться в обычном режиме параллельно.
Пожалуйста, смотрите этот ответ, который лучше объясняет, как обрабатываются ошибки в foreach
а также %dopar%
,
Надеюсь, это немного прояснит вашу проблему.