WikiDer > RPyC
эта статья слишком полагается на использованная литература к основные источники. (Ноябрь 2009 г.) (Узнайте, как и когда удалить этот шаблон сообщения) |
Разработчики) | Томер Филиба |
---|---|
изначальный выпуск | 17 декабря 2005 г. |
Стабильный выпуск | 4.0.1 / 12 июня 2018 |
Репозиторий | |
Написано в | Python |
Операционная система | Кроссплатформенность |
Тип | Удаленный вызов процедур |
Лицензия | Лицензия MIT |
Интернет сайт | rpyc |
RPyC (произносится а-а-а-а), или рэмоция Pyтон Cвсе, это Python библиотека для вызовы удаленных процедур (RPC), а также распределенных вычислений. В отличие от обычных механизмов RPC, таких как ONC RPC, CORBA или Java RMIRPyC прозрачен, симметричен и не требует специальных языков оформления или определения. Более того, он обеспечивает программный доступ к любому питоническому элементу, будь то функции, классы, экземпляры или модули.
особенности
- Симметричный - нет разницы между клиентом и сервером - могут работать оба. Единственное отличие состоит в том, что клиент обычно является стороной, которая инициирует действие. Например, симметричность позволяет клиенту передавать функции обратного вызова серверу.
- Прозрачный - удаленные объекты выглядят и ведут себя так же, как и локальные.
- Исключения распространяются как локальные
- Обеспечивает синхронную и асинхронную работу:
- Синхронные операции возвращают 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 представляет собой полную переписанную библиотеку, добавляя способностьна основе модели безопасности, явных услуг и различных других улучшений.