首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在集群上分发Haskell

在集群上分发Haskell
EN

Stack Overflow用户
提问于 2015-03-14 02:50:36
回答 1查看 403关注 0票数 18

我有一段处理文件的代码,

代码语言:javascript
复制
processFiles ::  [FilePath] -> (FilePath -> IO ()) -> IO ()

此函数派生执行IO操作的异步进程。此IO操作必须通过作业调度系统(例如Slurm)提交到群集。

因为我必须使用作业调度系统,所以不能使用cloudHaskell来分发闭包。相反,程序编写一个包含所需计算的新Main.hs,即复制到群集节点以及main所依赖的所有模块,然后使用"runhaskell Main.hs opts“远程执行。然后,异步进程应定期向作业调度系统(使用threadDelay)询问作业是否已完成。

有没有办法避免创建新的Main?我可以序列化IO操作并以某种方式在节点中执行它吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-02 08:29:35

是啊。有一个神奇的库叫做packman。它允许您将任何haskell内容转换为数据(只要其中没有IORef或相关内容)。下面是你需要的东西:

代码语言:javascript
复制
trySerialize :: a -> IO (Serialized a)
deserialize :: Serialized a -> IO a
instance Typeable a => Binary (Serialized a)

是的,这些就是确切的类型。您可以使用trySerialize打包您的IO操作,使用Binary将其传输到任何位置,然后使用deserialize获取IO操作,以备使用。

packman的注意事项是:

  • 它将事物存储为thunks。这可能就是您想要的,这样节点就可以执行计算。
    • 说,如果你的推力很大,那么Binary可能也会很大。评估thunk可以解决这个问题。
    • 就像我说过的,可变引用是一个禁忌。要注意的一件事是他们在你不知道it.

的情况下就在thunks里面

除此之外,这似乎就是你想要的!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29039815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档