2017-07-05 12 views
1

フォルダからデータをロードし続け、データの純粋な計算を行い、それを書き戻す大きなIO関数があります。非同期マップの同期セクション

私はこれがperfecty動作します...しかし、少しあまりにもよくhttp://hackage.haskell.org/package/async-2.1.1.1/docs/Control-Concurrent-Async.html#v%3amapConcurrently

から

mapConcurrently_ iofun folderList 

を使用して並列に複数のフォルダ上でこの機能を実行しています。現在、putStrLnコールの文字出力さえも非同期であるため、コンソールログが読めなくなります。

IOアクションをputStrLnの同期バージョンと同期させたり、さらに改善したりする方法はありますか?

答えて

2

STMを使用する場合は、スレッドを調整する方法は、MVarまたはTVarです。それらについては、「Parallel and Concurrent Haskell」ですべて読むことができます。

do mutex <- newMVar() 
    let putStrLn' = withMVar mutex . const . putStrLn 
    mapConcurrently_ (iofunPrintingWith putStrLn') folderList 
+0

あなたは 'async'のソースをたくさん読んで学習することもできます。これはstmプリミティブの力のおかげで、非常に単純なライブラリです – jberryman

関連する問題