мониторинг изменений в файлах в режиме реального времени - PullRequest
17 голосов
/ 24 января 2011

У меня есть программа, которая отслеживает определенные файлы на предмет изменений.Как только файл обновляется, файл обрабатывается.До сих пор я придумал общий подход к «анализу в реальном времени» в R.Может быть, мы можем обсудить их преимущества / недостатки.

monitor <- TRUE
start.state <- file.info$mtime # modification time of the file when initiating

while(monitor) {
  change.state <- file.info$mtime
  if(start.state < change.state) {
    #process
  } else {
    print("Nothing new.")
  }
  Sys.sleep(sleep.time)
}

Ответы [ 5 ]

7 голосов
/ 24 января 2011

Аналогично предложению использовать системный API, это также можно сделать с помощью qtbase (https://r -forge.r-project.org / R /? Group_id = 454), который будет кроссплатформенным средством изнутриR:

dir_to_watch <- "/tmp"

library(qtbase)
fsw <- Qt$QFileSystemWatcher()
fsw$addPath(dir_to_watch)

id <- qconnect(fsw, "directoryChanged", function(path) {
  message(sprintf("directory %s has changed", path))
})

cat("abc", file="/tmp/deleteme.txt")
6 голосов
/ 24 января 2011

Я имею в виду взлом: вы можете настроить задание CRON / Запланированное задание для запуска R-скрипта каждые n секунд (или что-то еще). R скрипт проверяет хеш файла, и если хеш не совпадает, запускает анализ. Вы можете использовать функцию digest::digest, просто ознакомьтесь с руководством.

6 голосов
/ 24 января 2011

Если ваша система предоставляет API для мониторинга изменений файловой системы, вам следует использовать это. Я верю, что Маки идут с этим. Не уверен насчет других платформ.

Edit: Быстрый goog дал мне:

Linux - http://wiki.linuxquestions.org/wiki/FAM

Win32 - http://msdn.microsoft.com/en-us/library/aa364417(VS.85).aspx

Очевидно, что эти API устранят любые опросы, которые вам требуются. С другой стороны, они не всегда могут быть доступны.

У Java есть это: http://jnotify.sourceforge.net/ и http://java.sun.com/developer/technicalArticles/javase/nio/#6

3 голосов
/ 24 января 2011

Вы можете использовать функцию tclTaskSchedule в пакете tcltk2, чтобы настроить функцию, которая проверяет наличие обновлений и запускает ваш код. Затем он будет выполняться на регулярной основе (вы устанавливаете время), но все равно позволит вам использовать сеанс R.

3 голосов
/ 24 января 2011

Если у вас есть много файлов, которые вы хотите отслеживать, тогда R может быть слишком медленным для этой цели.Перейдите к вашему каталогу c: или / и посмотрите, сколько времени потребуется, чтобы сделать file.info(dir(recursive = TRUE)).Сценарий dos или bash может быть быстрее.

В противном случае код выглядит нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...