从Uberjar跑步时,如何强制对Clojure懒Seq的评估



考虑以下MWE:

(ns toto.core
(:gen-class))
(defn write-something [i]
  (spit (str "out-" (str i) ".txt") "Hi there!"))
(defn -main
  "I don't do a whole lot ... yet."
  [& args]
  (dorun (pmap write-something (range 16))))

如果我从复制中运行-main,则可以按预期运行:它可以创建文件和返回。但是,如果我创建一个Uberjar并运行java -jar <toto.whatever-standalone.jar>,它将创建文件,但无法退出程序。我怀疑这是懒惰的问题,但是无法弄清楚为什么dorun无法正常工作。 关于我做错了什么的想法?

在clojure中,pmap函数使用了利用公共线程池的未来调用。泳池中的线程在完成任务后将其存活1分钟,以降低线程分配的成本。

如果您确定可以关闭线程池(因为应用程序退出)您需要致电(dorun ...)之后的关闭代理,因此线池被杀死。

另外,您可以致电(System/exit <status>)立即关闭应用程序。

相关内容

  • 没有找到相关文章

最新更新