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