【问题标题】:Concurrent process in ClojureClojure 中的并发进程
【发布时间】:2016-12-22 13:41:03
【问题描述】:

我有一个项目列表[1 2 3 4 5 ..] 和一个函数进程(defn process[conn i] ..)。

如何同时将此功能应用于列表的所有项目,但同时限制进程数(例如,一次只运行 2 个进程)。当所有进程完成后,我会收到通知,以便我可以清理资源(关闭连接等)。

谢谢,

【问题讨论】:

    标签: concurrency clojure


    【解决方案1】:

    您可以只使用内置的 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 将返回已完成的 Futures 列表以及每个作业的结果(可能是成功或失败)。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-10
    • 2012-09-07
    • 1970-01-01
    相关资源
    最近更新 更多