Во время работы в консоли R я хотел бы установить фоновую задачу, которая контролирует конкретное соединение, и когда происходит событие, выполняется другая функция (предупреждение).Кроме того, я могу настроить все так, чтобы внешняя функция просто отправляла оповещение R, но, похоже, это та же проблема: необходимо настроить прослушиватель.
Я могу сделать это в выделенном месте.процесс R, но я не знаю, возможно ли это из консоли.Кроме того, меня не интересует прерывание R, если оно вычисляет функцию, но оповещение или прерывание, если консоль просто ожидает ввода.
Вот три варианта использования:
Самый простой возможный пример - просмотр файла.Предположим, у меня есть файл с названием «latestData.csv», и я хочу отслеживать его на предмет изменений;когда это изменяется, myAlert()
выполняется.(Можно расширить его, чтобы делать разные вещи, но просто всплывающее уведомление о том, что файл был изменен, полезно.)
Монитор другого типа будет следить за тем, является ли данный компьютерНедостаточно ОЗУ и может выполнить save.image()
и завершиться.Опять же, это может быть простой проблемой просмотра файла, созданного внешним монитором, который сохраняет вывод top
или какой-либо другой команды.
Другой пример похож на другой недавний SOвопрос, о: R остановит компьютер EC2, на котором он работает .Если предупреждение от другого компьютера или процесса говорит программе сохранить и завершить работу, то возможность прослушивания этого предупреждения была бы великолепной.
В настоящий момент, я подозреваю, есть два способаобработки этого: через Rserve и, возможно, через fork
.Если у кого-то есть примеры того, как сделать это с помощью пакета или другого метода, это было бы здорово.Я думаю, что решение любого из этих трех вариантов использования решит все из них, по модулю немного внешнего кода.
Примечание 1: Я понимаю, за этот ответ на другой вопрос SO что R однопоточный, поэтому я подозреваю, fork
и Rserve может работать.Тем не менее, я не уверен в целесообразности, если кто-то взаимодействует с терминалом R.Несмотря на то, что REPL R присоединен к входу с консоли, я пытаюсь либо обойти это, либо подражать ему, вот где fork
или Rserve
может быть ответом.
Примечание 2: Для техзнакомы с обработкой событий / методами обработки событий, которые тоже все решат.Я просто не нашел ничего об этом в R.
Обновление 1: я обнаружил, что в руководстве по написанию расширений R есть раздел, относящийся к обработке событий , в котором упоминаетсяиспользование R_PolledEvents
.Это выглядит многообещающе.