2016-08-04 2 views
0

Я использую foreach dopar совсем немного в R, чтобы воспользоваться преимуществами нескольких ядер, чтобы ускорить выполнение ad hoc-анализа в интерактивных сеансах.Как остановить foreach% dopar% без испортить сеанс

Однако иногда я заметил, что если я вырвусь из параллельных циклов (обычно, когда понял, что у меня что-то не так в рабочих потоках), нажав control-c, сеанс будет испорчен в том смысле, что когда Я снова использую foreach dopar, все будет выполняться только одним потоком (верхний не будет показывать несколько процессов, как обычно, плюс работа займет возраст по сравнению с тем, когда работает распараллеливание). Это не происходит на каждом контроле c, но достаточно часто, чтобы быть раздражающим (перезагрузка всего сеанса из совершенно новой сессии может раздражать)

Есть ли способ предотвратить это, или, по крайней мере, способ исправить окружающую среду, когда это произойдет?

ответ

1

Лучшим способом является регистрация ваших кластеров, а затем создание функции остановки, которая автоматически обрабатывает ядра, если вы выходите из процесса.

myClusters <- makeCluster(4) #the number should reflect your system and project 
registerDoParallel(myClusters) 

и вы можете использовать что-то вроде

on.exit(stopCluster(myCluster)) 

Если вы установите его таким образом, то вы должны быть в порядке, когда выход. Вы, возможно, потребуется запустить

gc() в консоли, чтобы получить хлама из ....

+0

О, круто, я был запущен с 'killall -u me' 2 лет – JustGettinStarted

Смежные вопросы