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

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

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

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


person agnivesh    schedule 02.07.2018    source источник
comment
Это может вам помочь: stackoverflow.com/q/31138257/6103040   -  person F. Privé    schedule 02.07.2018
comment
Я лично пытаюсь реализовать обработку исключений с помощью осторожных условий, чтобы параллельные задачи все равно выполнялись.   -  person A Duv    schedule 02.07.2018


Ответы (1)


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

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

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

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

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

person Riverarodrigoa    schedule 02.07.2018