Respuesta lentísima de SimpleXMLRPCServer en windows xp

Sio2 <[email protected]> Thu, 10 Dec 2009 22:26:57 +0100
Newsgroups gmane.comp.python.general.castellano
Message-ID <[email protected]>
Un saludo, listeros. A ver si me pod=E9is echar un cable, porque no me
explico lo que ocurre.

Estoy desarrollando una peque=F1a aplicaci=F3n 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=E1quina
windows. Si lo hace en un linux las respuestas son pr=E1cticamente
inmediatas. He estado haciendo algunas pruebas y llegu=E9 a la conclusi=F3=
n
de que no era culpa de mi programa, as=ED que he probado hacer lo
siguiente: me he olvidado de mi c=F3digo y he cogido un ejemplo de
servidor XMLRPC pelado, sin threads ni nada. En concreto, tom=E9 el de
esta p=E1gina:

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

aunque lo he enmendado para que admita conexiones que no sean la local.
Pego aqu=ED el c=F3digo de prueba:

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

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

server =3D SimpleXMLRPCServer(('0.0.0.0', 9000), logRequests=3DTrue)

# Expone una funci=F3n
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=3Dargv[1]
except IndexError:
   SERVER=3D'localhost'

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

Lo m=E1s simple que se estila. Ahora he llevado este servidor a dos
m=E1quinas 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-

=BFAlguien sabe explicarme por qu=E9? =BFEs culpa de alguna configuraci=F3=
n
esot=E9rica del windows xp que hay que cambiar y no de python? Yo el
windows este lo =FAnico 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=E1quina virtual, porque prob=E9 en el trabajo entre dos
m=E1quinas windows reales y el problema de demora tambi=E9n se produce. S=
in
embargo, he estado buscando en internet a ver si ve=EDa algo al respecto =
y
no he encontrado nada.

=A1Ah! Si el cliente se ejecuta en la misma m=E1quina 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.

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