Мне нужно выполнять R eval
s многопоточным способом, что Rserve
обеспечивает довольно хорошо. Но если оценка одного экземпляра занимает слишком много времени, мне нужно иметь возможность отключить экземпляр, который вычисляет оценку блокировки. Насколько я проверял, данный экземпляр отказывается выключаться до тех пор, пока не будет выполнена оценка (очевидно, ему нужно получить результат, прежде чем снова слушать). Вот мой вопрос:
Есть ли способ получить дескриптор java для экземпляра блокировки (что-то вроде объекта Process
), чтобы я мог убить/прекратить eval грубой силой (что-то вроде process.destroy()
)? Другими словами, когда я запрашиваю eval (создаю соединение, бросаю команду), как мне установить связь между обрабатываемым eval и связанным с ним экземпляром Rsere через java?
Или я что-то пропустил в Rserve, который уже позволяет справляться с такого рода потребностями?
Примечание: я уже пробовал запускать все (все evals) через serverEval()
вместо обычного eval
, который запускает вычисления на основном экземпляре, но это, конечно, неудовлетворительно, так как используется только один процесс (основной). Этого я могу убить, но моя главная цель состояла в том, чтобы иметь возможность индивидуально отключить блокирующий eval, работающий на отдельном экземпляре. И, естественно, сохранить преимущества моих 8 ядер процессора, то есть сохранить параллелизм. В противном случае нет смысла использовать Rserve (в этом случае движка JRI будет более чем достаточно).
Примечание. Я хотел бы избежать подобных вещей (thread), работающий с несколькими экземплярами самого главного сервера на разных портах. Это не вариант.
Я уже пытался получить информацию в списке рассылки Rserve, но не получил ответа. Надеюсь, я достаточно ясно выразился, чтобы получить здесь ответ или полезный комментарий. Если нет, пожалуйста, запросите подробности. Большое спасибо заранее.
Изменить: я также протестировал RCaller, который экземпляры R нужны, но, поскольку он записывает результаты в файлы XML для последующего анализа со стороны java (на самом деле не используя протокол связи, как Rserve), он слишком медленный для того, что я должен выполнить...