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