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