0
我有一個項目列表[1 2 3 4 5 ..]
和一個函數進程(defn process[conn i] ..)
。Clojure中的並行處理
如何將此函數同時應用於列表的所有項目,但同時限制進程數量(例如,一次只能運行2個進程)。當所有進程完成時,我都會通知,以便我可以清理資源(關閉連接等)。
感謝,
我有一個項目列表[1 2 3 4 5 ..]
和一個函數進程(defn process[conn i] ..)
。Clojure中的並行處理
如何將此函數同時應用於列表的所有項目,但同時限制進程數量(例如,一次只能運行2個進程)。當所有進程完成時,我都會通知,以便我可以清理資源(關閉連接等)。
感謝,
你可以只使用內置的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
將返回完成期貨的列表,每個作業的結果(這可能是要麼成功要麼失敗)。
感謝亞歷克斯,我也發現這個有用的lib https://github.com/TheClimateCorporation/claypoole – QuanNH
是的,這也是一個很好的。 –