Рабочие doRedis немедленно закрываются на окнах
Решено - смотри ниже.
Я пытаюсь запустить параллельный бэкэнд doRedis с R на Windows 7. И у меня возникают проблемы при попытке попробовать первый пример из виньетки doRedis:
library('doRedis')
registerDoRedis('jobs')
startLocalWorkers(n = 2, queue = 'jobs', host = 'localhost')
...
И вот где все выходит из строя: сначала запускаются два процесса R.exe, которые видны в диспетчере задач, затем запускаются два процесса Rterm.exe, которые загружают около 250 МБ данных (которые, как я ожидаю, будут библиотеками из моего файл.Rprofile локального проекта), а затем мгновенно закрывается.
Я провел несколько проверок:
Сервер Redis, кажется, работает как положено, что я могу проверить, выполнив:
redisInfo()
и видеть, что он действительно получил соединения, и что клиент подключен.
Кроме того, работает несколько независимых R-сессий и регистрация в очереди "заданий", т.е. выполняется следующее:
require('doRedis')
redisWorker('jobs')
И затем запустить пример MC в основной сессии R, введя
foreach(icount(10), .combine = sum, .multicombine = TRUE, .inorder = FALSE) %dopar% 4*sum((runif(1e5)^2 + runif(1e5)^2)<1)/1e6
работает как объявлено - терминальные сеансы сообщают об активности, а основной сеанс получает результат. \новая линия
Следовательно, мне нужна помощь...
... отследить причину, по которой рабочие процессы, которые вызываются основным сеансом R, мгновенно завершают работу. Однако я понятия не имею, с чего начать. Я знаю возможные обходные пути для этой проблемы, но было бы гораздо удобнее иметь возможность начать все это без проблем.
Спасибо!
Решение
Проблема заключалась в том, что процессы R, вызываемые startLocalWorkers
Команда не знала здесь, чтобы искать библиотеки. Если бы я призвал redisWorker
в сеансе R с правильно измененным списком путей к библиотекам все работало нормально. Если, однако, я попросил эту сессию R запустить новых работников - все провалилось.
Решение состояло в том, чтобы создать переменную среды R_USER_LIBS
который содержит путь к папкам библиотеки. Как только это сделано, все работает отлично.
Пользователи RStudio должны знать, что каждая модификация переменных среды требует от них перезапуска RStudio, прежде чем дочерние процессы R смогут прочитать новое значение измененного R_LIBS_USER
,
1 ответ
Я предлагаю вам попробовать свои тесты, используя Rterm.exe, а не что-то вроде Rgui, в противном случае сообщения об ошибках могут быть потеряны. Когда вы запустите startLocalWorkers, вы должны сразу увидеть кучу сообщений, написанных на стандартный вывод. Если вы их не видите, вы также можете пропустить некоторые очень полезные сообщения об ошибках.
Кроме того, так как вы смогли выполнитьredisWorker
успешно в интерактивном сеансе R возможно, что что-то в вашем.Rprofile заставляет работников умирать в неинтерактивных сеансах R, созданных startLocalWorkers. Вы можете проверить это, создав скрипт R, который выполняет redisWorker, и выполнив его с помощью команды, подобной следующей:
R --slave -f worker.R