Проблема
У меня есть рабочий процесс анализа, при котором участвующие компьютеры выполняют моделирование и последующий анализ нескольких задач параллельно, используя стандартную реализацию doParallel
.Компьютеры-участники координируют свои действия, связываясь с удаленным сервером SQL, чтобы зарезервировать задачи для выполнения и помечать их как выполненные.
Компьютеры работают с задержками, поскольку сервер медленно обрабатывает все запросы и транзакции, отправленные на него.Поскольку из-за большого объема трафика существует время ожидания, компьютеры-участники - как они в данный момент запрограммированы - не будут переходить к следующему набору задач, пока все их задачи не будут помечены как завершенные, иногда ожидая часа.
Вопрос / Решение
Я бы предпочел, чтобы подпрограмма обрабатывала сообщения SQL, особенно обновление завершено, чтобы основной цикл анализа не ожидал завершения этих транзакций, прежде чем получитьбольше задач.
Как я могу вызвать сценарий sub R из основного в отдельном сеансе, чтобы основной сценарий не занимался ожиданием завершения подпрограммы?
Если я использовал system(cmd = "R PATHTOSCRIPT.R")
, будет ли это порождать отдельную Rsession или она будет действовать в пределах той же самой?
Я предполагаюоднократный вызов сценария перед циклом анализа, который, возможно, выполняется с заданными интервалами для обновления завершенных задач.
Примечания
Я не могу использоватьsource()
, потому что это заставит главный скрипт ждать завершения подпрограммы.
Пакеты
Я использую DBI
и odbc
для управления транзакциями SQL, с dbExecute()
длявыполнять транзакции SQL, включенные в обработку ошибок, для автоматических повторных попыток через rpois(5)
секунд.