Qua*_*nNH 0 concurrency clojure
我有一个项目列表[1 2 3 4 5 ..]
和一个功能过程(defn process[conn i] ..)
.
如何同时将此函数应用于列表的所有项目,但同时限制进程数量(例如,一次只运行2个进程).当所有进程完成后,我被通知,以便我可以清理资源(关闭conn等).
谢谢,
您可以使用内置的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)
Run Code Online (Sandbox Code Playgroud)
这里execute
将返回已完成的Futures列表以及每个作业的结果(可能成功或失败).