Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Concurrency Clojure中的并发进程_Concurrency_Clojure - Fatal编程技术网

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,我也找到了这个有用的库