当我并行运行大量 http 请求时,我会得到"no such protocol name: tcp"



代码

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在所有领域都是严格的。

相关内容

  • 没有找到相关文章

最新更新