¿Cuál es la opción actual para hacer RPC en Python? [cerrado]

131

En realidad, he trabajado con Pyro y RPyC, pero hay más implementación de RPC que estas dos. ¿Podemos hacer una lista de ellos?

Protocolos nativos basados ​​en Python:

Marcos RPC con muchos protocolos subyacentes:

Marcos basados ​​en JSON-RPC:

JABÓN:

Marcos basados ​​en XML-RPC:

Otros:

edomaur
fuente
3
Realmente depende del contexto. ¿Internet? LAN? ¿Sitio web? Computación distribuida? Prototipo rápido? ¿Banda ancha? Tamaño de los mensajes?
ddaa
@silentghost: hecho. Prefiero no establecer "wiki comunitario" de forma predeterminada, porque a veces me equivoco :) @ ddaa: Cualquiera. Estoy preguntando acerca de RPC en términos generales, si tienen algunos pros / contras en contextos específicos, agréguelos a la lista.
edomaur
Tuve la necesidad de hacer RPC "real" hace un tiempo (el tipo RFC 1050) y las opciones no me impresionaron mucho, así que terminé teniendo que hacer la mayor parte yo mismo. Si alguien tiene una buena alternativa a eso, me gustaría saberlo.
Mattias Nilsson
Para aquellos que quieran RPC Python-to-Python: la última versión de PyRo 4 no es compatible con SSL, pero PyRo 3 todavía lo es; ambos son todos Python, por lo que son compatibles con Python 2, Python 3, PyPy, Jython y IronPython. RPyc admite SSL, mientras que Circuits no menciona esto.
RichVel

Respuestas:

38

XML-RPC es parte de la biblioteca estándar de Python:

marbs
fuente
+1 a XML-RPC por simplicidad, incluso teniendo en cuenta que SimpleXMLRPCServer carece de un manejo adecuado de errores.
Denis Otkidach
1
"Advertencia El módulo xmlrpc.server no es seguro contra datos construidos de forma malintencionada", por lo que tiene algunos casos de uso bastante limitados.
Equidamoid
1
@Equidamoid Si necesita analizar datos no confiables o no autenticados, consulte docs.python.org/2/library/xml.html#xml-vulnerabilities
AmaChefe
16

Apache Thrift es una opción RPC en varios idiomas desarrollada en Facebook. Funciona sobre sockets, las firmas de funciones se definen en archivos de texto de forma independiente del idioma.

RemcoGerlich
fuente
Thrift no es compatible con Python 3 aún no es compatible, es una pena
Roberto
Comentario personal: Thrift es una pesadilla de mantenimiento. No he visto dos distribuciones de Linux que incluso utilicen indicadores de configuración comparables. No hace mucho tiempo (cuando compilé 0.10.0 desde la fuente), la mayoría de las características deben deshabilitarse para que se construya en sistemas "exóticos" como Ubuntu, Debian o Fedora actuales. Los cambios de tipo de datos bajo el capó hacen que el uso de C ++ sea un desastre #ifdef, y en los 12 años de existencia, no han logrado convencerse de que su software está listo para la versión 1.0.0. Me gusta la gran cantidad de idiomas admitidos, pero creo que esa es su debilidad: tratar de hacer demasiado.
Marcus Müller
(Uso el ahorro en un proyecto GNU de tamaño mediano que mantengo. @Roberto, soporte de ahorro Py3, al menos por ahora.)
Marcus Müller
Realmente animaría a la gente a pensar realmente si realmente necesita un marco de lenguaje cruzado que literalmente intente conectar PHP a C ++ a Java a Python a Erlang a Common Lisp a Haskell a Swift. Estos son diferentes idiomas, por una razón, y Thrift necesita hacer compromisos para encontrar un denominador común. Yo diría que la gran mayoría de las personas realmente solo necesita conectar 1 o 2 idiomas diferentes, y sería preferible un marco más delgado.
Marcus Müller
6

Desde que hice esta pregunta, comencé a usar python-symmetric-jsonrpc . Es bastante bueno, se puede usar entre software python y no python y sigue el estándar JSON-RPC. Pero carece de algunos ejemplos.

edomaur
fuente
2

Hay algunos intentos de hacer que SOAP funcione con python, pero no lo he probado mucho, así que no puedo decir si es bueno o no.

SOAPy es un ejemplo.

Mattias Nilsson
fuente
2
Habiendo utilizado la mayoría de los marcos SOAP e implementado uno para hacer RPC basado en la reflexión, mi consejo es simple: no lo hagas. Si no necesita comunicación entre idiomas + descripciones de interfaz independientes + asignación a clases personalizadas, la complejidad de SOAP solo será un dolor de cabeza. Incluso si necesita usarlo, necesitará la experiencia para saber qué subconjunto de SOAP es seguro de usar.
Ants Aasma
3
SOAP es una pesadilla en general y especialmente en Python. No lo use a menos que se vea obligado a hacerlo.
Denis Otkidach
44
Mi experiencia limitada con SOAP está de acuerdo con los otros comentarios aquí. xmlrpc a menudo hace todo lo que necesito.
Mattias Nilsson
2

Estamos desarrollando Versile Python (VPy), una implementación para python 2.6+ y 3.x de un nuevo marco ORB / RPC. Las versiones funcionales de desarrollo AGPL para revisión y prueba están disponibles . VPy tiene capacidades nativas de Python similares a PyRo y RPyC a través de una capa general de objetos nativos ( ejemplo de código ). El producto está diseñado para la interacción de objetos remotos independientes de la plataforma para implementaciones de Versile Platform .

Divulgación completa: trabajo para la empresa que desarrolla VPy.

Versátil
fuente
1

tal vez ZSI que implementa SOAP. Utilicé el generador de código auxiliar y funcionó correctamente. El único problema que encontré es hacer SOAP a través de HTTPS.

Phil
fuente
0

Te perdiste omniORB . Esta es una implementación CORBA bastante completa, por lo que también puede usarla para hablar con otros idiomas que tengan soporte CORBA.

Dave Kirby
fuente