这些请求都是并行运行的,使进程用光了文件描述符。使用
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
在所有领域都很严格。