【问题标题】:GobEncoder for Passing Anonymous Function via RPCGobEncoder 通过 RPC 传递匿名函数
【发布时间】:2013-04-29 04:05:10
【问题描述】:

我正在尝试构建一个系统,该系统将在多台机器上执行一个函数,通过 RPC 将函数匿名传递给每台工作机器(例如 MapReduce)以在某些数据子集上执行。 Gob 不支持编码函数,尽管 GobEncoder 的 docs 说“实现 GobEncoder 和 GobDecoder 的类型可以完全控制其数据的表示,因此可能包含诸如私有字段、通道和函数之类的东西,它们通常不会在 gob 流中传播”,所以这似乎是可能的。

有什么例子可以说明这可能是如何工作的吗?我不太了解应该如何使用 Gob 进行这种编码/解码。

【问题讨论】:

    标签: go rpc gob


    【解决方案1】:

    恕我直言,这行不通。虽然如果您的类型实现 Gob{En,De}coder 它可以(反)序列化未导出的结构字段 它仍然不可能(反)序列化代码:Go 是静态编译和链接的 运行时代码生成功能(这将绕过编译时类型 安全)。

    简短:您不能序列化函数,只能序列化数据。您的工人必须提供 您不想执行的功能。看看 encoding/rpc。

    【讨论】:

      【解决方案2】:

      您可能想尝试 GoCircuit,它提供的框架基本上可以让您执行此操作:

      http://www.gocircuit.org/

      它的工作原理是将你的二进制文件复制到远程机器上,启动它,然后执行一个有效地表示“使用参数 A、B、... 执行函数 X”的 RPC

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-12
        • 2018-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多