Clojure - 等待文件更改

时间:2015-12-29 07:40:42

标签: events clojure busy-waiting

我有两个文件,都是1字节大(只包含" 1"或" 0")。

现在在用Clojure编写的程序的主循环中,我想要等到其中一个文件发生变化才继续进行。这可以通过忙等待来完成,使用slurp轮询文件以进行更改。但这是浪费资源。

如果没有忙碌等待,我怎么能这样做?

2 个答案:

答案 0 :(得分:4)

在Java VM> 7上,我想你可以使用Watch Service API。您可以直接使用它,也可以使用现有的Clojure包装器,因为它们有abundance个。

使用Clojure-Watch这是它的样子:

(ns clojure-watch.example
 (:require [clojure-watch.core :refer [start-watch]]))

(start-watch [{:path "/home/niko/project/hello"
           :event-types [:create :modify :delete]
           :bootstrap (fn [path] (println "Starting to watch " path))
           :callback (fn [event filename] (println event filename))
           :options {:recursive true}}])

```

您可以收听文件修改,删除和创建。 Watch API尽可能使用本机文件系统支持进行文件更改通知。

答案 1 :(得分:0)

为了完成 Nicolas 的回答,还有 https://github.com/wkf/hawk 似乎在 MacOS 上工作效率更高。