При открытии Rstudio запускает много процессов (запущенных с параллельным пакетом в предыдущем сеансе), как их убить?

Я прочитал этот вопрос и ответы SO (R параллельные вычисления и зомби-процессы ), но это, похоже, не совсем подходит для моей ситуации.

У меня есть 4-ядерный MacBook Pro с Mac OS X 10.10.3, R 3.2.0 и RStudio 0.99.441.

Вчера я пробовал пакеты foreach и doParallel (я хочу использовать их в пакете, над которым работаю). Я сделал это:

cl <- makeCluster(14)
registerDoParallel(cl)

a <- 0
ls <- foreach(icount(100)) %dopar% {
    b <- a + 1
}

Мне ясно, что не имеет смысла иметь 14 процессов на моей 4-ядерной машине, но программа действительно будет работать на 16-ядерной машине. В этот момент мой компьютер остановился. Я открыл монитор активности и обнаружил 16 (или больше, может быть?) R-процессов. Я попытался принудительно закрыть их из монитора активности - безуспешно. Я закрыл RStudio, и это убило все процессы R. Я снова открыл RStudio, и это перезапустило все процессы R. Я перезагрузил компьютер и перезапустил RStudio, и это перезапустило все процессы R.

Как я могу запустить RStudio без перезапуска всех этих процессов?

РЕДАКТИРОВАТЬ: я забыл упомянуть, что я также пересобрал пакет, над которым работал в то время (все процессы могли быть запущены во время сборки)

РЕДАКТИРОВАТЬ 2: Кроме того, я не могу остановить кластер (cl), потому что cl больше нет в среде... Я закрыл этот сеанс R.

EDIT3: когда я открываю R.app (графический интерфейс R, поставляемый с R) или открываю R в терминале, такой проблемы не возникает. Поэтому я думаю, что это должно быть связано с RStudio.

EDIT4: между открытием RStudio и запуском всех этих нежелательных процессов возникает случайная задержка. От 15 с до 2 мин.

EDIT5: кажется, что процессы запускаются только после того, как я открою проект, из которого они были запущены.

EDIT6: я просматривал файлы .Rproj.user в поисках вещей, которые нужно удалить. Я удалил все файлы (но не каталоги) в ctx, pcs и sdb. Проблема сохраняется.

EDIT7: когда я запускаю killall R в командной строке, он убивает все эти процессы, но когда я перезапускаю RStudio и снова открываю проект, все процессы запускаются снова.

EDIT8: я использовал «killall -s R | wc -l», чтобы обнаружить, что количество процессов R растет и растет, пока проект открыт. Он поднялся до 358, а затем я запустил killall R, потому что мой компьютер издавал страшные звуки.

EDIT9: RStudio в настоящее время полностью непригоден для использования. Каждый раз, когда я «убиваю R», он перезапускает все процессы в течение 15 секунд.

EDIT10: Когда я инициирую сборку, которая также запускает множество процессов R - 109 при последней проверке. Все эти процессы запускаются, когда в сборке указано «подготовка пакета для отложенной загрузки». В этот момент компьютер практически останавливается.

EDIT11: я удалил файл .Rproj (на самом деле просто переместил его в качестве резервной копии) и каталог .Rproj.user. Я использовал «создать проект из каталога» в RStudio. Когда я открываю этот НОВЫЙ проект, я все равно получаю такое же поведение. Что делает RStudio, когда я открываю проект, которого нет нигде в файле .Rproj или каталоге .Rproj.user!? Я потратил целый день на эту одну проблему.... :(


person rcorty    schedule 04.06.2015    source источник
comment
См. здесь для сброса rstudio в новое состояние: support.rstudio.com/hc/en-us/articles/   -  person 27 ϕ 9    schedule 04.06.2015
comment
Джей, спасибо за ваше предложение. Я сделал то, что было описано на этой странице, и это определенно сбросило мои настройки RStudio (макет, внешний вид и т. д.), но когда я запускаю RStudio, он все равно запускает все нежелательные процессы.   -  person rcorty    schedule 04.06.2015
comment
И я просто добавлю - я думаю, что ваше предложение может быть ответом (а не комментарием). То, что это просто/коротко, не означает, что это не может быть полностью правильным и самым полезным ответом!   -  person rcorty    schedule 04.06.2015
comment
Я только что запустил это на своем macbook pro с makeCluster(32), и (i) мой компьютер не завис (на самом деле код завершился практически мгновенно) и (ii) после перезапуска RStudio процессы R больше не появлялись.   -  person Roland    schedule 04.06.2015
comment
@ Роланд, может быть, это как-то связано с созданием пакета?   -  person rcorty    schedule 04.06.2015


Ответы (3)


Наилучшее предположение — новейшая версия RStudio пытается выполнить некоторую работу за кулисами для разработки базы данных автозаполнения на основе вызовов library() и require(), которые она обнаруживает в открытых файлах вашего проекта. Для этого он запускает новые процессы R, загружает эти пакеты (с library()), а затем возвращает набор всех объектов, доступных для этого пакета.

Вы случайно не загружаете определенные пакеты со сложными .onLoad() действиями? Вполне возможно, что этот движок в RStudio запускает процессы R за кулисами, но по какой-то причине зависает и оставляет вас с этими (возможно, устаревшими или занятыми) процессами R.

Для справки: здесь сообщалось о похожей проблеме.

person Kevin Ushey    schedule 05.06.2015
comment
Кевин - спасибо за понимание. Бьюсь об заклад, это что-то в этом роде. Но пакет, над которым я работаю, имеет множество зависимостей, поэтому, может быть, лучшим решением будет просто вернуться к предыдущей версии RStudio? Однако мне нравится автозавершение кода в новой RStudio. - person rcorty; 05.06.2015
comment
Если вам удастся сузить проблему, отправьте отчет об ошибке на support.rstudio.com. Спасибо! - person Kevin Ushey; 05.06.2015

Вот что в итоге поправил:

Удалите пакет, который я создал (я думаю, двоичный файл... Я щелкнул «x» справа от его имени в части «Пакеты» RStudio).

Восстановите его с помощью

library(parallel)

закомментировано.

person rcorty    schedule 05.06.2015
comment
Почему в вашем пакете есть вызов library? Зависимости состояния в вашем файле DESCRIPTION. - person Roland; 06.06.2015
comment
Совершенно справедливое замечание. Как описано в исходном вопросе, я просто играл с параллельным пакетом, чтобы посмотреть, как он работает. У меня был файл с именем temp.R, в котором я делал некоторые вещи типа hello world. Живи и учись. Может быть, хитрость заключается в том, чтобы назвать этот файл temp.txt или как-то иначе, чем .R, чтобы, если я захочу перестроить, пока файл существует, он будет проигнорирован. ИЛИ просто добавьте этот файл в .buildigore! - person rcorty; 06.06.2015

unloadNamespace("doParallel")

убьет безымянного рабочего, запущенного registerDoParallel

если у вас есть имя кластера, вы можете использовать:

stopCluster(cl)
person cloudscomputes    schedule 09.11.2019