Progtwigción de red en Python

¿Qué biblioteca debo usar para la progtwigción en red? ¿Los sockets los mejores, o hay una interfaz de nivel superior, eso es estándar?

Necesito algo que sea bastante multiplataforma (es decir, Linux, Windows, Mac OS X), y solo necesita poder conectarse a otros progtwigs de Python usando la misma biblioteca.

¿Solo desea enviar datos de Python entre nodos (posiblemente en computadoras separadas)? Es posible que desee ver SimpleXMLRPCServer. Se basa en el servidor HTTP incorporado, que se basa en el servidor Socket incorporado, ninguno de los cuales es el servidor con mayor capacidad industrial, pero es fácil de configurar rápidamente:

 from SimpleXMLRPCServer import SimpleXMLRPCServer server = SimpleXMLRPCServer(("localhost", 9876)) def my_func(a,b): return a + b server.register_function(my_func) server.serve_forever() 

Y fácil de conectar a:

 import xmlrpclib s = xmlrpclib.ServerProxy('http://localhost:9876') print s.my_func(2,3) >>> 5 print type(s.my_func(2,3)) >>>  print s.my_func(2,3.0): >>> 7.0 

Twisted es popular para aplicaciones industriales, pero tiene una curva de aprendizaje brutal.

Hay un marco que te puede interesar: Torcido

La respuesta depende de lo que estás tratando de hacer.

“¿Qué biblioteca debo usar para la progtwigción en red?” es bastante vago

por ejemplo, si desea hacer HTTP, puede buscar bibliotecas estándar como urllib, urllib2, httplib, sockets. Todo depende del protocolo que desee utilizar y de la capa de red en la que desee trabajar.

Hay bibliotecas en Python para varias tareas de red … correo electrónico, web, rpc, etc, etc.

para empezar, revise el manual de referencia de la biblioteca estándar y vea qué tareas desea hacer, luego vaya desde allí: http://docs.python.org/library/index.html

Como se mencionó anteriormente, Twisted es el más popular (de lejos). Sin embargo, hay muchas otras alternativas que vale la pena explorar. Tornado y Diesel son probablemente los dos mejores contendientes. Una comparación más completa se encuentra aquí .

Personalmente, solo uso asyncore de la biblioteca estándar, que es un poco como una versión muy reducida de Twisted, pero esto es porque prefiero una interfaz simple y de bajo nivel. Si desea una interfaz de nivel superior, especialmente para comunicarse con otra instancia de su propio progtwig, no necesariamente tiene que preocuparse por la capa de red, y puede considerar algo más alto como RPyC o pyro . Luego, la red se convierte en un detalle de implementación y puede concentrarse solo en enviar la información.

A mucha gente le gusta Twisted . Fui un gran fan por un tiempo, pero trabajando un poco y pensando más en eso me desilusioné. Es complejo, y la última vez que lo miré, muchos de ellos suponían que su progtwig siempre podría enviar datos, lo que conducirá a posibles situaciones en las que su progtwig aumenta el uso de la memoria. Lado remoto o no está siendo recogido lo suficientemente rápido.

En mi opinión, depende mucho de qué tipo de progtwigción de red quiera hacer. Muchas veces no te importa realmente hacer las cosas mientras esperas IO. HTTP, por ejemplo, está muy orientado a la solicitud de respuesta, y si solo está hablando con un solo servidor, hay pocas razones para necesitar algo como Twisted y sockets simples o las bibliotecas HTTP integradas de Python funcionarán bien.

Si está escribiendo un servidor de cualquier tipo, casi con certeza debe estar dirigido a eventos. Twisted tiene una ligera ventaja allí, pero todavía me parece demasiado complejo. Bittorrent, por ejemplo, fue escrito en Python y no usa Twisted en absoluto.

Otro factor que favorece a Twisted es que existe un código para muchos protocolos ya escritos para él. Por lo tanto, si desea hablar de un protocolo existente, es posible que ya se haya realizado un arduo trabajo por usted.

El módulo de socket en la biblioteca estándar es, en mi opinión, una buena opción si no necesita un alto rendimiento.

Es una API muy famosa que es conocida por casi todos los desarrolladores de casi todos los idiomas. Es bastante sencillo y hay mucha información disponible en Internet. Además, será más fácil para otras personas entender su código.

Supongo que un marco basado en eventos como Twisted tiene mejor rendimiento pero en casos básicos los sockets estándar son suficientes.

Por supuesto, si usa un protocolo de nivel superior (http, ftp …), debe usar la implementación correspondiente en la biblioteca estándar de python.

El socket es un api de bajo nivel, se asigna directamente a la interfaz del sistema operativo. Twisted, Tornado … son marcos de alto nivel (por supuesto, están construidos en socket porque socket es de bajo nivel). Cuando se trata de la progtwigción TCP / IP, debe tener algunos conocimientos básicos para tomar una decisión sobre lo que debe usar:

  • ¿Utilizará un protocolo conocido como HTTP, FTP o creará su propio protocolo?
  • ¿Bloqueando o no bloqueando? Torcido, Tornado es un marco no bloqueante (básicamente como nodejs). Por supuesto, socket puede hacer todo porque todos los demás marcos se basan en su;)