7

这段代码立即返回:

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

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

(ns practice.core)

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

为什么它永远不会回来?

有趣的是,如果我替换pmapmap,它会正常返回。

4

1 回答 1

9

您需要shutdown-agents在方法结束时调用-main

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

这是在http://clojure.org/agents上提到的:

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

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

于 2013-05-13T10:21:11.243 回答