标准的pmap
函数不允许指定自定义窗口大小。它将其作为可用的CPU数量加2。
(+ 2 (.. Runtime getRuntime availableProcessors))
我想知道为什么没有一种方法来传递自定义的N。为了绕过它,我有一个类似的函数:
(defn pmap+
"
Like pmap but accepts a custom size of a parallel
window. Lazy. Takes only one collection of arguments
at the moment.
"
[n func items]
(lazy-seq
(let [[head tail]
(split-at n items)]
(when (seq head)
(let [futures
(for [item head]
(future (func item)))]
(concat
(->> futures
doall
(map deref))
(pmap+ n func tail)))))))
当通过HTTP API处理第三方服务时,这很有用。我的问题是,我们能否有一个带有可选N参数的pmap,或者可能添加一个新函数?
谢谢。
Ivan