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エージェント スレッド プールで実行される futures を使用します。

于 2013-05-13T10:21:11.243 に答える