clojure - 定期调用Clojure中的函数

标签 clojure periodic-task

我正在寻找一种非常简单的方法来定期在Clojure中调用函数。

JavaScript的 setInterval 具有我想要的API。如果我在Clojure中重新想象它,它将看起来像这样:

(def job (set-interval my-callback 1000))

; some time later...

(clear-interval job)

出于我的目的,我不介意这是否创建新线程,在线程池中运行还是其他。计时是否准确也并不关键。实际上,提供的时间间隔(以毫秒为单位)可能只是一个 call 结束与下一个 call 开始之间的延迟。

最佳答案

Clojure还有很多调度库:
(从简单到非常高级)

  • at-at
  • chime(core.async集成)
  • monotony
  • quartzite

  • 直接来自at-at的github主页的示例:
    (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))
    

    如果要在任务结束和下一个任务开始之间延迟一秒而不是两次启动之间延迟,请使用(every 1000 #(println "I am cool!") my-pool :fixed-delay true)

    关于clojure - 定期调用Clojure中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21404130/

    相关文章:

    python - asyncio - 不止一次等待协程(周期性任务)

    combobox - JavaFX 8.0 TableView 是否存在排序错误?

    clojure - 当 Pedestal 中允许原点时,不存在 'Access-Control-Allow-Origin' header

    javascript - 如何在 ClojureScript 中使用方法和构造函数创建 JS 对象

    clojure - 如何防止 Clojure Reagent 中的 HTML 转义(类似 Hiccup)

    testing - 莱宁根的单元测试找不到测试文件

    python - Django 和 Celery - ModuleNotFoundError : No module named 'celery.task'

    android - Android 6.0及以上系统如何7*24每10秒蜂鸣一次

    embedded - 如何在UML状态图中显示状态机的周期性调用?

    haskell - 如何仅使用 Haskell 无休止地运行 Haskell 程序?