use*_*572 2 events clojure busy-waiting
我有两个文件,都是 1 字节大(只包含“1”或“0”)。
现在在用 Clojure 编写的程序的主循环中,我想等到其中一个文件发生更改后再继续。这可以通过忙等待来完成,使用 slurp 轮询文件的更改。但这是一种资源浪费。
我怎么能不忙着等待呢?
在 Java VM>7 上,我会说您可以使用 Watch Service API。您可以直接使用它,或者使用Clojure的已经存在的包装之一,因为有相当的丰富他们的。
使用 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}}])
Run Code Online (Sandbox Code Playgroud)
``
您可以收听文件的修改、删除和创建。Watch API 尽可能使用本机文件系统支持文件更改通知。