在 python 的 RPC 世界中返回另一个远程对象的远程对象
Posted
技术标签:
【中文标题】在 python 的 RPC 世界中返回另一个远程对象的远程对象【英文标题】:remote objects returning another remote objects in python's RPC world 【发布时间】:2011-01-08 00:30:43 【问题描述】:我基本上熟悉 Python 中可用的 RPC 解决方案:XML-RPC 和 Pyro。我可以通过在服务器端绑定它来创建一个远程对象,然后我可以在我可以操作的客户端获取代理对象。当我在远程对象上调用某些方法时,例如proxy.get_file() 然后 rpc 机制尝试序列化结果对象(在这种情况下为文件)。这通常是预期的行为,但我需要的是获取一个文件对象作为另一个远程代理对象,而不是将其传输到客户端:
afile_proxy = proxy.get_file()
代替:
afile = proxy.get_file()
我可以在服务器端重新绑定这个对象并在客户端处理这种情况,但这需要一些样板代码。有没有可以为我做这件事的机制/库?例如,它可以使对象保持远程,直到它们成为原始对象。
【问题讨论】:
【参考方案1】:我找到了一个完全满足我需要的库:RPyC。来自intro:
简单、不可变的 Python 对象(如字符串、整数、元组等)是按值传递的,这意味着将值本身传递到另一端。 所有其他对象都通过引用传递,这意味着对对象的“引用”传递到另一端。这允许应用在被引用对象上的更改反映在实际对象上。无论如何,感谢您指出“参考”术语。 :)
【讨论】:
【参考方案2】:我正在参与开发一个新的远程对象交互框架Versile Python (VPy),它执行与您列出的类似的功能。 VPy 正在开发中,当前版本主要用于测试,但请随时查看。
有两种方法可以执行您使用 VPy 描述的远程 I/O 类型。一种是使用远程 native object 引用,例如文件对象类似于 Pyro/RPyC 并访问这些对象类似于如果它们是本地的。
另一种选择是使用 VPy 远程 stream 框架,它非常灵活,可以配置为执行双向流和远程重新定位或截断流等操作。第二种方法的优势在于它支持异步 I/O 加上流框架拆分数据传输以减少往返延迟的影响。
【讨论】:
【参考方案3】:afile_proxy = proxy.get_file_proxy()
并在 API 中定义 FileProxy
对象是什么。这完全取决于客户端需要对代理做什么。葛名?删除它?获取其内容?
如果您只想跟踪稍后要处理的内容,您甚至可以使用参考(可能是 URL)。这是在网络上使用所有嵌入式内容(例如图像)完成的操作。
【讨论】:
以上是关于在 python 的 RPC 世界中返回另一个远程对象的远程对象的主要内容,如果未能解决你的问题,请参考以下文章