Concurrency Clojure中的并发进程
我有一个项目列表Concurrency Clojure中的并发进程,concurrency,clojure,Concurrency,Clojure,我有一个项目列表[1 2 3 4 5..],上面有一个函数进程(defn进程[conn I]..) 如何将此函数同时应用于列表的所有项,但同时限制进程数(例如,一次仅运行两个进程)。当所有进程完成时,我会收到通知,以便清理资源(关闭conn等) 谢谢,您可以使用内置的Java执行器: (defn process [conn i] (println (str "Thread " (.getName (Thread/currentThread)) " executing " i "\n")))
[1 2 3 4 5..]
,上面有一个函数进程(defn进程[conn I]..)
如何将此函数同时应用于列表的所有项,但同时限制进程数(例如,一次仅运行两个进程)。当所有进程完成时,我会收到通知,以便清理资源(关闭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)
此处执行将返回一个已完成的未来列表,其中包含每个作业的结果(可能是成功的,也可能是失败的)。您可以使用内置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
将返回一个已完成的未来列表,其中包含每个作业的结果(可能是成功的,也可能是失败的)。谢谢Alex,我也找到了这个有用的库谢谢Alex,我也找到了这个有用的库