Respuesta lentísima de SimpleXMLRPCServer en windows xp

Sio2 aussiliar en online.fr
Jue Dic 10 22:26:57 CET 2009


Un saludo, listeros. A ver si me podéis echar un cable, porque no me
explico lo que ocurre.

Estoy desarrollando una pequeña aplicación que, por motivos que no
vienen al caso, he tenido que separar en servidor-cliente. Para
comunicar ambas partes he desarrollado una interfaz telnet simploncilla
y otra XMLRPC. Para la XMLRPC, que es la que verdaderamente me
interesa, uso SimpleXMLRPCServer.

El problema es que todas las peticiones al servidor, por muy simples que
sean, se demoran 4,5 segundos cuando el servidor corre en una máquina
windows. Si lo hace en un linux las respuestas son prácticamente
inmediatas. He estado haciendo algunas pruebas y llegué a la conclusión
de que no era culpa de mi programa, así que he probado hacer lo
siguiente: me he olvidado de mi código y he cogido un ejemplo de
servidor XMLRPC pelado, sin threads ni nada. En concreto, tomé el de
esta página:

http://denklab.org/articles/2008/7/pymotw-simplexmlrpcserver/

aunque lo he enmendado para que admita conexiones que no sean la local.
Pego aquí el código de prueba:

PARTE SERVIDOR
-------8<-------
from SimpleXMLRPCServer import SimpleXMLRPCServer
import logging
import os

# Prepara registro
logging.basicConfig(level=logging.DEBUG)

server = SimpleXMLRPCServer(('0.0.0.0', 9000), logRequests=True)

# Expone una función
def list_contents(dir_name):
    logging.debug('list_contents(%s)', dir_name)
    return os.listdir(dir_name)
server.register_function(list_contents)

try:
    print 'Usa Control-C para salir'
    server.serve_forever()
except KeyboardInterrupt:
    print 'Saliendo'
------->8-------

PARTE CLIENTE
-------8<-------
import xmlrpclib

from sys import argv

try:
   SERVER=argv[1]
except IndexError:
   SERVER='localhost'

proxy = xmlrpclib.ServerProxy('http://'+SERVER+':9000')
print proxy.list_contents('.')
------->8-------

Lo más simple que se estila. Ahora he llevado este servidor a dos
máquinas virtuales, una corre windows (192.168.1.32) y otra una gentoo
(192.168.1.10) y este es el resultado:

#v+
$ time ./client.py 192.168.1.10
['client.py', 'server.py']

real    0m0.029s
user    0m0.020s
sys     0m0.000s
#v-

#v+
$ time ./client.py 192.168.1.32
['abies', 'Abies 2.lnk', 'client.py', 'server.py']

real    0m4.676s
user    0m0.012s
sys     0m0.012s
#v-

¿Alguien sabe explicarme por qué? ¿Es culpa de alguna configuración
esotérica del windows xp que hay que cambiar y no de python? Yo el
windows este lo único que he hecho es instalarlo, meterle python 2.6.4
(gentoo tiene el 2.6.2) y abrirle el puerto correspondiente. No es un
problema de la máquina virtual, porque probé en el trabajo entre dos
máquinas windows reales y el problema de demora también se produce. Sin
embargo, he estado buscando en internet a ver si veía algo al respecto y
no he encontrado nada.

¡Ah! Si el cliente se ejecuta en la misma máquina windows que el
servidor, no se demora la respuesta, aunque se conecte a la ip
192.168.1.32, en vez de a la 127.0.0.1.

Muchas gracias de antemano.

-- 
   Un bel morir tutta una vita honora.
                  --- Francisco Petrarca ---
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





Más información sobre la lista de distribución Python-es