Multithreading 什么';使用Clojure计划每天午夜调用函数的最简单方法是什么?

Multithreading 什么';使用Clojure计划每天午夜调用函数的最简单方法是什么?,multithreading,clojure,Multithreading,Clojure,虽然可以使用线程并设置超时,以便从新线程启动时起按设置的时间间隔运行函数,但如何使函数从下一个午夜起在00:00:00运行 只需使用java.util.Timer: 它看起来有点新,并且有一些改进。Esp see scheduleAtFixedRate​(Runnable command, long initialDelay, long period, TimeUnit unit) 提交一个定期操作,该操作在给定的 初始延迟,以及随后的给定期限;就是

虽然可以使用线程并设置超时,以便从新线程启动时起按设置的时间间隔运行函数,但如何使函数从下一个午夜起在00:00:00运行

只需使用
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)))