2013-05-13 12 views
7

この作品はすぐに戻ります:なぜ、この単純なメインメソッドがleiningenで実行されても返されないのですか?コードの

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

をしかし、私はレインを使用してmainメソッド内のコードの同じ部分を実行すると:

(ns practice.core) 

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

なぜそれが戻らないのでしょうか?

面白いことに、pmapmapに置き換えた場合、正常に戻ります。

答えて

9

-mainメソッドの最後にshutdown-agentsに電話する必要があります。

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

これはhttp://clojure.org/agentsに記載されて:エージェントの使用はJVMのシャットダウンを防ぐことができます非デーモンバックグラウンドスレッド のプールを開始すること

注意。シャットダウンエージェントを使用して これらのスレッドを終了し、シャットダウンを許可します。

pmapは、エージェントスレッドプール上で実行される先物を使用します。