Periodically calling a function in Clojure

clojure, periodic-task

Solution

There's also quite a few scheduling libraries for Clojure: (from simple to very advanced)

- at-at

- chime (core.async integration)

- monotony

- quartzite

Straight from the examples of the github homepage of at-at:

(use 'overtone.at-at)
(def my-pool (mk-pool))
(let [schedule (every 1000 #(println "I am cool!") my-pool)]
  (do stuff while schedule runs)
  (stop schedule))

Use `(every 1000 #(println "I am cool!") my-pool :fixed-delay true)` if you want a delay of a second between end of task and start of next, instead of between two starts.

Problem

I'm looking for a very simple way to call a function periodically in Clojure. JavaScript's `setInterval` has the kind of API I'd like. If I reimagined it in Clojure, it'd look something like this: ``` (def job (set-interval my-callback 1000)) ; some time later... (clear-interval job) ``` For my purposes I don't mind if this creates a new thread, runs in a thread pool or something else. It's not critical that the timing is exact either. In fact, the period provided (in milliseconds) can just be a delay between the end of one call completing and the commencement of the next.

Original source

Related problems