我写了一个计算语料库中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)