【发布时间】:2015-05-16 09:11:04
【问题描述】:
我有一段处理文件的代码,
processFiles :: [FilePath] -> (FilePath -> IO ()) -> IO ()
此函数生成一个执行 IO 操作的异步进程。此 IO 操作必须通过作业调度系统(例如 Slurm)提交到集群。
因为我必须使用作业调度系统,所以无法使用 cloudHaskell 来分发闭包。相反,程序会编写一个包含所需计算的新 Main.hs,即复制到集群节点以及 main 依赖的所有模块,然后使用“runhaskell Main.hs [选择]”。然后异步进程应该定期询问作业调度系统(使用 threadDelay)如果作业完成。
有没有办法避免创建新的 Main?我可以序列化 IO 动作并在节点中以某种方式执行吗?
【问题讨论】:
-
Andrew Cowie 和 Ozgun Ataman 建议我编译程序并将其发送到节点,因为编译后的二进制文件是独立的并且易于 rsync。这方面的一个例子是由 Ozgun Ataman 开发的基于强子 [1] 的 Hadoop MapReduce 程序来集群工作中的节点。 [1]github.com/soostone/hadron
标签: haskell closures distributed