标准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