远程对象在python的RPC世界中返回另一个远程对象

时间:2011-01-08 00:30:43

标签: python rpc

我基本上熟悉Python中可用的RPC解决方案:XML-RPC和Pyro。我可以通过在服务器端绑定它来创建远程对象,然后我可以在客户端获取我可以操作的代理对象。当我在远程对象上调用某些方法时,例如proxy.get_file()然后rpc机制尝试序列化结果对象(在这种情况下是一个文件)。这通常是预期的行为,但我需要的是将文件对象作为另一个远程代理对象而不是将其转移到客户端:

afile_proxy = proxy.get_file()

而不是:

afile = proxy.get_file()

我可以在服务器端重新绑定此对象并在客户端处理此类情况,但这需要一些样板代码。是否有机制/库可以为我做这个?例如,它可以保持对象远程,直到它们是原始对象。

3 个答案:

答案 0 :(得分:2)

我找到了一个完全符合我需要的库:RPyC。来自intro

  • 简单的,不可变的python对象(如字符串,整数,元组等)按值传递,这意味着值本身将传递给另一端。
  • 所有其他对象都通过引用传递,这意味着对象的“引用”被传递到另一端。这允许在引用对象上应用的更改反映在实际对象上。

无论如何,谢谢你指出一个'参考'一词。 :)

答案 1 :(得分:1)

我参与开发一个新的远程对象交互框架Versile Python(VPy),它执行与您列出的相似的功能。 VPy正在开发中,目前的版本主要用于测试,但请随时查看。

有两种方法可以执行您使用VPy描述的远程I / O类型。一种是使用远程native object引用,例如文件对象类似于Pyro / RPyC,并访问那些类似于本地的对象。

另一种选择是使用VPy远程stream框架,该框架非常灵活,可以配置为执行双向流和操作,例如远程重新定位或截断流。第二种方法的优点是它可以实现异步I / O加上流框架分割数据传输,以减少往返延迟的影响。

答案 2 :(得分:0)

afile_proxy = proxy.get_file_proxy()

在API中定义FileProxy对象是什么。这完全取决于客户端需要对代理执行的操作。那个名字?删除它?获取其内容?

如果你想要的是跟踪你想要处理的事情,你甚至可以使用引用(可能是URL)。这是在网络上完成的所有嵌入内容,如图像。