удаленные объекты, возвращающие другие удаленные объекты в мире RPC Python - PullRequest
1 голос
/ 08 января 2011

Я в основном знаком с решениями RPC, доступными в Python: XML-RPC и Pyro.Я могу создать удаленный объект, привязав его на стороне сервера, а затем получить прокси-объект на стороне клиента, с которым я могу работать.Когда я вызываю некоторый метод для удаленного объекта, например, proxy.get_file (), тогда механизм rpc пытается сериализовать результирующий объект (файл в данном случае).Обычно это ожидаемое поведение, но мне нужно получить файловый объект в качестве другого удаленного прокси-объекта, а не передавать его на клиентскую сторону:

afile_proxy = proxy.get_file()

Вместо:

afile = proxy.get_file()

Я мог бы привязать этот объект на стороне сервера и обработать такой случай на стороне клиента, но для этого потребовался бы некоторый код.Есть ли механизм / библиотека, которая сделала бы это для меня?Например, он может держать объекты удаленными, пока они не станут примитивными.

Ответы [ 3 ]

2 голосов
/ 08 января 2011

Я нашел библиотеку, которая делает именно то, что мне нужно: RPyC.Начиная с intro :

  • простые неизменяемые объекты Python (например, строки, целые числа, кортежи и т. Д.) Передаются по значению, то есть само значение передается другой стороне.
  • все другие объекты передаются по ссылке, что означает, что «ссылка» на объект передается на другую сторону.Это позволяет отражать изменения, примененные к ссылочному объекту, на реальном объекте.

В любом случае, спасибо за указание на термин «ссылка».:)

1 голос
/ 01 декабря 2011

Я участвую в разработке новой инфраструктуры взаимодействия с удаленными объектами Versile Python (VPy), которая выполняет функции, аналогичные тем, которые вы перечислили. VPy находится в разработке с текущими выпусками, в первую очередь предназначенными для тестирования, но не стесняйтесь взглянуть.

Есть два способа выполнить тип удаленного ввода-вывода, который вы описываете с помощью VPy. Одним из них является использование удаленных собственных объектов ссылок, например, на. файловые объекты, похожие на Pyro / RPyC, и доступ к этим объектам аналогично локальным.

Другим вариантом является использование VPy remote stream framework, который достаточно гибок и может быть настроен для выполнения двунаправленной потоковой передачи и таких операций, как удаленное перемещение или усечение потока. Преимущество второго подхода заключается в том, что он обеспечивает асинхронный ввод-вывод, плюс структура потока разделяет передачу данных, чтобы уменьшить влияние задержки в обоих направлениях.

0 голосов
/ 08 января 2011
afile_proxy = proxy.get_file_proxy()

И определите в API, что такое объект FileProxy. Все зависит от того, что клиент должен делать с прокси. Ge имя? Удали это? Получить его содержимое?

Вы могли бы даже получить ссылку (возможно, URL), если все, что вам нужно, это отслеживать то, что вы хотите обработать позже. Это то, что делается в Интернете со всем встроенным контентом, например изображениями.

...