相关疑难解决方法(0)

管道:多流消费者

我写了一个计算语料库中NGrams频率的程序.我已经有一个功能消耗了一个令牌流并产生了一个单一订单的NGrams:

ngram :: Monad m => Int -> Conduit t m [t]
trigrams = ngram 3
countFreq :: (Ord t, Monad m) => Consumer [t] m (Map [t] Int)
Run Code Online (Sandbox Code Playgroud)

目前我只能将一个流消费者连接到流源:

tokens --- trigrams --- countFreq
Run Code Online (Sandbox Code Playgroud)

如何将多个流使用者连接到同一个流源?我想要这样的东西:

           .--- unigrams --- countFreq
           |--- bigrams  --- countFreq
tokens ----|--- trigrams --- countFreq
           '--- ...      --- countFreq
Run Code Online (Sandbox Code Playgroud)

一个优点是并行运行每个消费者

编辑: 感谢Petr,我提出了这个解决方案

spawnMultiple orders = do
    chan <- atomically newBroadcastTMChan

    results <- forM orders $ \_ -> newEmptyMVar
    threads <- forM (zip results orders) $
                        forkIO …
Run Code Online (Sandbox Code Playgroud)

haskell nlp conduit

7
推荐指数
1
解决办法
497
查看次数

标签 统计

conduit ×1

haskell ×1

nlp ×1