代码
mapConcurrently httpLBS requests
抛出
ConnectionFailure Network.BSD.getProtocolByName: does not exist (no such protocol name: tcp))
在大约 1k 请求之后。
所有请求都是并行运行的,使进程耗尽文件描述符。用
import ClassyPrelude
traverseThrottled :: (MonadMask m, MonadBaseControl IO m, Forall (Pure m), Traversable t) => Int -> (a -> m b) -> t a -> m (t b)
traverseThrottled concLevel action taskContainer = do
sem <- newQSem concLevel
let throttledAction = bracket_ (waitQSem sem) (signalQSem sem) . action
mapConcurrently throttledAction taskContainer
(如果不使用ClassyPrelude
,请调整导入)
如果使用流式处理替代方案,请确保等效的 httpLBS
使用请求。而且你的b
在所有领域都是严格的。