在Clojure中多次并行执行相同的功能?

时间:2015-10-08 23:57:09

标签: clojure parallel-processing

我有一个我想多次运行的函数,生成一个结果列表:

(take 10 (repeatedly #(myfunc)))

我意识到我可以与pmap

并行运行它们
(pmap (fn [_] (myfunc)) (range 10))

但它有点不整洁。是否有标准功能可以让我这样做:

(prun 10 #(myfunc))

3 个答案:

答案 0 :(得分:2)

您可能也对The Claypoole library感兴趣管理线程池和并行处理。查看他们的pmap版本和pfor

答案 1 :(得分:1)

我认为现有功能并不存在,但使用pcalls而不是pmap似乎更接近您想要的功能:

(defn prun [n f]
  (apply pcalls (repeat n f)))

您不需要在myfunc,btw的调用中使用#()包裹repeatedly,也不需要按照上面的定义调用prun

(prun 10 myfunc)

您可能会发现pvalues也很有用。

答案 2 :(得分:0)

您可以使用dotimes

(dotimes [_ 10] (myfunc))

这将运行您的函数 10 次。确保在与你的函数相同的命名空间中运行它