什么是在clojure中定期运行任务的最简单方法

时间:2016-01-24 23:22:32

标签: clojure core.async

我想每10秒执行一次功能。怎么做最简单的方法?在core.async中,有一个超时功能,它将在MOST等待那个时间,我想要的是等待至少那个时间。

1 个答案:

答案 0 :(得分:4)

at-at是我最喜欢的。以下示例从网页复制:

(use 'overtone.at-at)
(def my-pool (mk-pool))
(at (+ 1000 (now)) #(println "hello from the past!") my-pool)

如果您通常使用core.async,chime也很棒。 再次,取自他们的例子:

(:require [chime :refer [chime-ch]]
          [clj-time.core :as t]
          [clojure.core.async :as a :refer [<! go-loop]])

    (let [chimes (chime-ch [(-> 2 t/secs t/from-now)
                        (-> 3 t/secs t/from-now)])]
    (a/<!! (go-loop []
           (when-let [msg (<! chimes)]
             (prn "Chiming at:" msg)
             (recur)))))