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