我有一个大的 IO 函数,它将持续从文件夹加载数据,对数据执行纯计算,然后写回。
我正在多个文件夹上并行运行此函数
mapConcurrently_ iofun folderList
from http://hackage.haskell.org/package/async-2.1.1.1/docs/Control-Concurrent-Async.html#v%3amapConcurrently http://hackage.haskell.org/package/async-2.1.1.1/docs/Control-Concurrent-Async.html#v%3amapConcurrently
这很完美……但有点太好了。现在即使是字符输出putStrLn
调用是异步的,这会导致控制台日志不可读。
有没有办法使 IO 操作同步,甚至更好的是 putStrLn 的同步版本?
协调线程的方式是通过MVar
s or TVar
如果您想使用 STM。您可以在“并行和并发 Haskell”中阅读有关它们的所有内容。你可以这样做:
do mutex <- newMVar ()
let putStrLn' = withMVar mutex . const . putStrLn
mapConcurrently_ (iofunPrintingWith putStrLn') folderList
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)