2016-12-22 9 views
0

私は、項目[1 2 3 4 5 ..]のリストと関数処理(defn process[conn i] ..)を持っています。Clojureにおける並行処理

リストのすべての項目にこの機能を同時に適用できますが、同時にプロセス数を制限することは可能です(たとえば、一度に2つのプロセスしか実行しないなど)。すべてのプロセスが完了したら、リソースをクリーンアップできるように通知しました(close connなど)。

おかげで、

答えて

5

あなただけの組み込みのJavaの実行プログラムを使用することができます。ここでは

(defn process [conn i] 
    (println (str "Thread " (.getName (Thread/currentThread)) " executing " i "\n"))) 

(defn execute [data conn] 
    (let [svc (java.util.concurrent.Executors/newFixedThreadPool 2) 
     jobs (map (fn [v] #(process conn v)) data)] 
    (.invokeAll svc jobs))) 

(execute (range 100) nil) 

executeは成功かのどちらかとすることができる(各ジョブの結果で完了先物のリストを返します。失敗)。

+1

ありがとうアレックス、私もこの便利なlibを見つけたhttps://github.com/TheClimateCorporation/claypoole – QuanNH

+0

あまりにも良いことだ。 –

関連する問題