这段代码立即返回:
user=> (dorun (pmap + [1 2] [3 4]))
nil
但是,当我使用lein在main方法中运行相同的代码时:
(ns practice.core)
(defn -main [& args]
(dorun (pmap + [1 2] [3 4])))
为什么它永远不会回来?
有趣的是,如果我将pmap
替换为map
,则会正常返回。
答案 0 :(得分:9)
您需要在shutdown-agents
方法结束时致电-main
。
(defn -main [& args]
(dorun (pmap + [1 2] [3 4]))
(shutdown-agents))
http://clojure.org/agents上提到了这一点:
请注意,使用代理会启动非守护程序后台线程池 这将阻止JVM的关闭。使用shutdown-agents来 终止这些线程并允许关闭。
pmap
使用在代理线程池上运行的期货。