在Clojure中定期运行代码的最佳方法是什么?我目前正在使用java.util.concurrent.ScheduledExecutorService,但这是Java - 是否有一种Clojure方法来调度代码以定期间隔运行,延迟后,可以取消?我见过的所有Clojure代码示例都使用Thread/sleep,这似乎也是Java.
mik*_*era 21
非常值得查看Overtone的源代码,特别是在特定时间调度事件的代码.
这是一个音乐合成系统,所以你必须希望他们有正确的时间码!
此外,他们还将定时代码分成了一个单独的项目(泛音/ at-at),以便您可以根据需要轻松导入.这为底层Java库(即ScheduledThreadPoolExecutor和朋友)提供了一个很好的Clojure包装器.语法是这样的:
;; run some-function every 500ms
(every 500 some-function)
Run Code Online (Sandbox Code Playgroud)
您还可以在特定时间举办活动:
;; run some-other-function 10 seconds from now
(at (+ 10000 (now)) some-other-function)
Run Code Online (Sandbox Code Playgroud)
nic*_*ley 17
来自clojure网站http://clojure.org/concurrent_programming:
在所有情况下,Clojure都不会替换Java线程系统,而是使用它.Clojure函数是java.util.concurrent.Callable,因此它们与Executor框架等一起使用.
听起来你已经以正确的方式做到了.
(import 'java.util.concurrent.Executors)
(import 'java.util.concurrent.TimeUnit)
(.scheduleAtFixedRate (Executors/newScheduledThreadPool 1)
#(println "Hello") 0 5 TimeUnit/SECONDS)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3841 次 |
| 最近记录: |