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

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

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

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

1 Ответ

0 голосов
/ 02 июля 2018

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

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

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

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

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

...