为什么这个简单的主要方法在leiningen运行时永远不会返回?

时间:2013-05-13 09:47:16

标签: clojure leiningen

这段代码立即返回:

user=> (dorun (pmap + [1 2] [3 4]))
nil

但是,当我使用lein在main方法中运行相同的代码时:

(ns practice.core)

(defn -main [& args]
  (dorun (pmap + [1 2] [3 4])))

为什么它永远不会回来?

有趣的是,如果我将pmap替换为map,则会正常返回。

1 个答案:

答案 0 :(得分:9)

您需要在shutdown-agents方法结束时致电-main

(defn -main [& args]
  (dorun (pmap + [1 2] [3 4]))
  (shutdown-agents))

http://clojure.org/agents上提到了这一点:

  

请注意,使用代理会启动非守护程序后台线程池   这将阻止JVM的关闭。使用shutdown-agents来   终止这些线程并允许关闭。

pmap使用在代理线程池上运行的期货。