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