RPyC - RPyC

RPyC
Rpyc3-logo-medium.png
Разработчики)Томер Филиба
изначальный выпуск17 декабря 2005 г.
Стабильный выпуск
4.0.1 / 12 июня 2018 (2018-06-12)
Репозиторий Отредактируйте это в Викиданных
Написано вPython
Операционная системаКроссплатформенность
ТипУдаленный вызов процедур
ЛицензияЛицензия MIT
Интернет сайтrpyc.readthedocs.org

RPyC (произносится а-а-а-а), или рэмоция Pyтон Cвсе, это Python библиотека для вызовы удаленных процедур (RPC), а также распределенных вычислений. В отличие от обычных механизмов RPC, таких как ONC RPC, CORBA или Java RMI RPyC прозрачен, симметричен и не требует специальных языков оформления или определения. Более того, он обеспечивает программный доступ к любому питоническому элементу, будь то функции, классы, экземпляры или модули.

особенности

  • Симметричный - нет разницы между клиентом и сервером - могут работать оба. Единственное отличие состоит в том, что клиент обычно является стороной, которая инициирует действие. Например, симметричность позволяет клиенту передавать функции обратного вызова серверу.
  • Прозрачный - удаленные объекты выглядят и ведут себя так же, как и локальные.
  • Исключения распространяются как локальные
  • Обеспечивает синхронную и асинхронную работу:
    • Синхронные операции возвращают NetProxy (см. ниже)
    • Асинхронные операции возвращают AsyncResult, что похоже на обещание объекты
    • AsyncResults можно использовать как события
  • Потоки поддерживаются (хотя и не рекомендуется)
  • Для UNIX: интеграция сервера с inetd

Архитектура

RPyC предоставляет программисту подчиненный интерпретатор Python под его или ее контролем. В этом суть RPyC отличается от других RPC, которые требуют регистрации ресурсов перед доступом к ним. В результате использовать RPyC намного проще, но это происходит за счет безопасности (вы не можете ограничить доступ). RPyC предназначен для использования в доверенной сети, существуют различные схемы, включая VPN для достижения этого.

После того, как клиент подключен к серверу, он может выполнять удаленные операции одним из двух способов:

  • В модули свойство, которое предоставляет пространство имен модулей сервера: док = соед.модули.sys.path или conn.modules ["xml.dom.minidom"]. parseString (" xml ").
  • В выполнять функция, выполняющая данный код на сервере: соед.выполнять("распечатать" привет, мир "")

Удаленные операции возвращают нечто, называемое NetProxy, который является промежуточным объектом, отражающим любую операцию, выполняемую локально над ним, удаленному объекту. Например, conn.modules.sys.path - это NetProxy для объекта sys.path сервера. Любые локальные изменения, внесенные в conn.modules.sys.path, немедленно отражаются на удаленном объекте. Примечание: NetProxies не используются для простые объекты, такие как числа и строки, которые неизменны.

Асинхронный - это оболочка прокси, то есть она берет NetProxy и возвращает другой, который обертывает его с асинхронными функциями. Операции, выполняемые с AsyncNetProxy, возвращают нечто, называемое AsyncResult. У этих объектов есть предикат .is_ready, свойство .result, которое содержит результат (или блоки до его получения), и обратный вызов .on_ready, который будет вызываться при получении результата.

Применение

Первоначально RPyC был разработан для управления распределенным тестированием продуктов на различных платформах (все из которых могут работать с Python). Однако с тех пор RPyC эволюционировал, и теперь его варианты использования включают:

  • Распределенные вычисления (разделение нагрузки между машинами)
  • Распределенное тестирование (запуск тестов, которые соединяют несколько платформ и абстрагируются от аппаратных ресурсов)
  • Удаленное администрирование (настройка файлов конфигурации из одного центра и т. Д.)
  • Туннелирование или цепочка (пересечение границ маршрутизируемой сети)

Демо

импорт rpycconn = rpyc.классический.подключиться("имя хоста")  # предполагая, что классический сервер работает на 'hostname' Распечатать conn.модули.sys.дорожкаconn.модули.sys.дорожка.добавить("Люси")Распечатать conn.модули.sys.дорожка[-1] # версия ls, которая работает удаленноdef remote_ls(дорожка):    ros = conn.модули.Операционные системы    для имя файла в ros.listdir(дорожка):        статистика = ros.стат(ros.дорожка.присоединиться(дорожка, имя файла))        Распечатать "% d	% d	% s" % (статистика.st_size, статистика.st_uid, имя файла) remote_ls("/ usr / bin") # и исключения ...пытаться:     ж = conn.встроенный.открыто("/ несуществующий / файл / имя")Кроме IOError:     проходят

История

RPyC основан на работе Эяль Лотем (он же Лотекс ) на PyInvoke,[1] который больше не поддерживается. Первым публичным выпуском была 1.20, которая позволяла симметричный и прозрачный RPC, но не асинхронный операция. Версия 1.6, хотя никогда публично не выпускалась, добавила понятие «события», как средство, с помощью которого сервер сообщает клиенту. Версия 2.X, первым выпуском которой была 2.2, добавила синхронизацию потоков и Асинхронный концепция, которую можно использовать как надмножество событий. Версия 2.40 добавляет выполнять , который можно использовать для непосредственного выполнения кода на другой стороне соединения. RPyC 3 представляет собой полную переписанную библиотеку, добавляя способность на основе модели безопасности, явных услуг и различных других улучшений.

использованная литература

внешние ссылки