我有一个很大的IO功能,它将继续从文件夹加载数据,对数据执行纯计算,然后将其写回。
我使用
在多个文件夹上并行运行此功能mapConcurrently_ iofun folderList
这很有效......但有点太好了。现在,即使putStrLn
调用的字符输出也是异步的,这会导致无法读取控制台日志。
有没有办法让IO动作同步,甚至更好的同步版本的putStrLn?
答案 0 :(得分:2)
如果要使用STM,则协调线程的方式是MVar
s或TVar
s。您可以在"并行和并发Haskell"中阅读所有相关内容。你可以这样做:
do mutex <- newMVar ()
let putStrLn' = withMVar mutex . const . putStrLn
mapConcurrently_ (iofunPrintingWith putStrLn') folderList