Multithreading 什么';使用Clojure计划每天午夜调用函数的最简单方法是什么?
虽然可以使用线程并设置超时,以便从新线程启动时起按设置的时间间隔运行函数,但如何使函数从下一个午夜起在00:00:00运行 只需使用Multithreading 什么';使用Clojure计划每天午夜调用函数的最简单方法是什么?,multithreading,clojure,Multithreading,Clojure,虽然可以使用线程并设置超时,以便从新线程启动时起按设置的时间间隔运行函数,但如何使函数从下一个午夜起在00:00:00运行 只需使用java.util.Timer: 它看起来有点新,并且有一些改进。Esp see scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit) 提交一个定期操作,该操作在给定的 初始延迟,以及随后的给定期限;就是
java.util.Timer
:
它看起来有点新,并且有一些改进。Esp see
scheduleAtFixedRate(Runnable command, long initialDelay,
long period, TimeUnit unit)
提交一个定期操作,该操作在给定的
初始延迟,以及随后的给定期限;就是,
执行将在initialDelay之后开始,然后是initialDelay+
周期,然后初始化延迟+2*周期,依此类推
您可能还对
库中的感兴趣:只需使用java.util.Timer
:
它看起来有点新,并且有一些改进。Esp see
scheduleAtFixedRate(Runnable command, long initialDelay,
long period, TimeUnit unit)
提交一个定期操作,该操作在给定的
初始延迟,以及随后的给定期限;就是,
执行将在initialDelay之后开始,然后是initialDelay+
周期,然后初始化延迟+2*周期,依此类推
您可能还对感兴趣,请访问库:您也可以看看库
我没有测试这段代码,而是类似这样的东西
(ns my.example
(:需要[蜂鸣音:参考[蜂鸣音])
(:导入[java.time Instant LocalTime ZonedDateTime ZoneId Period]))
(定义我的任务[]
(println“执行任务”))
(定义周期序列[^即时开始持续时间或周期]
(迭代#(.addTo duration或period%)start);;生成一个惰性的实例序列
;; 生成无限的天数序列。将时区更改为您需要的时区。
(def天
(定期序列(->(本地时间/23 0)
(.调整为(ZoneDateTime/now(“美国/纽约”)的ZoneId/)
.toInstant)
(第1天期间)
(在天(fn[时间](我的任务))时发出蜂鸣音)
chime at返回一个零参数函数,您可以调用该函数来取消计划。所以你需要
像这样开始时间表
(def取消(在天(fn[时间]我的任务)时发出蜂鸣音)
(取消)
同样,我还没有测试过这段代码 你也可以看看图书馆
我没有测试这段代码,而是类似这样的东西
(ns my.example
(:需要[蜂鸣音:参考[蜂鸣音])
(:导入[java.time Instant LocalTime ZonedDateTime ZoneId Period]))
(定义我的任务[]
(println“执行任务”))
(定义周期序列[^即时开始持续时间或周期]
(迭代#(.addTo duration或period%)start);;生成一个惰性的实例序列
;; 生成无限的天数序列。将时区更改为您需要的时区。
(def天
(定期序列(->(本地时间/23 0)
(.调整为(ZoneDateTime/now(“美国/纽约”)的ZoneId/)
.toInstant)
(第1天期间)
(在天(fn[时间](我的任务))时发出蜂鸣音)
chime at返回一个零参数函数,您可以调用该函数来取消计划。所以你需要
像这样开始时间表
(def取消(在天(fn[时间]我的任务)时发出蜂鸣音)
(取消)
同样,我还没有测试过这段代码 您可以与任何Java库进行互操作,如Quartz、cron4j或Java定时器本身。为了使Clojure更加习惯,您还可以编写一个宏(或两个函数)来简化操作。例如,使用滚动宏可以创建自己的宏:
(解除任务我的午夜任务
"0 0 * * 2-6"
(打印“开始工作”)
(做点什么)
其中是在中使用的类似cron的模式。此处的实现用于处理调度和取消调度:
(defonce^调度程序(doto)(调度程序)
(.setDaemon true)
(.start)))
(defmacro deftask[名称cron和body]
`(defstate~name)
:开始(.schedule scheduler~cron(fn[]~@body))
:停止(.descschedule scheduler~name)))
您可以与任何Java库进行互操作,如Quartz、cron4j或Java Timer本身。为了使Clojure更加习惯,您还可以编写一个宏(或两个函数)来简化操作。例如,使用滚动宏可以创建自己的宏:
(解除任务我的午夜任务
"0 0 * * 2-6"
(打印“开始工作”)
(做点什么)
其中是在中使用的类似cron的模式。此处的实现用于处理调度和取消调度:
(defonce^调度程序(doto)(调度程序)
(.setDaemon true)
(.start)))
(defmacro deftask[名称cron和body]
`(defstate~name)
:开始(.schedule scheduler~cron(fn[]~@body))
:停止(.descschedule scheduler~name)))