2012-04-04 19 views
6

He creado un conjunto de demostraciones de un servidor TCP; sin embargo, mis ejemplos de gevent son notoriamente más lentos. Realmente no estoy probando el rendimiento, pero por el momento algo está haciendo que la versión gevent sea 5 veces más lenta.gevent urllib es lento

Estoy seguro de que debo compilar gevent pero no puedo resolver el problema. Estoy usando OSX leopard usando Fink compiled python 2.6 y 2.7. Intenté tanto el stable gevent como el gevent 1.0b1 y funciona de la misma manera. El eco tarda 5 segundos en responder, mientras que los otros ejemplos toman < 1seg. Si elimino la llamada urllib, el problema desaparece.

que poner todo el código en https://github.com/djay/geventechodemo

Para ejecutar los ejemplos que estoy usando zc.buildout manera de construir

$ python2.7 bootstrap.py 
$ bin/buildout 

Para ejecutar el ejemplo GEvent:

$ bin/py geventecho3.py & 
[1] 80790 
waiting for connection... 
$ telnet localhost 8080 
Trying 127.0.0.1... 
...connected from: ('127.0.0.1', 56588) 
Connected to localhost. 
Escape character is '^]'. 
hello 
echo: avast 

Este tomará 3-4 segundos para responder en mi sistema.

Sin embargo, el ejemplo roscado

$ bin/py threadecho2.py 

o el ejemplo trenzado

$ bin/py twistedecho2.py 

es menos de 1s. ¿Alguna idea de lo que estoy haciendo mal?

+0

Parece que depender de mi red local. En mi casa, gevent urlib call es lento en comparación con urlib normal, pero en la oficina ambos tienen la misma velocidad. Muy extraño. – djay

Respuesta

0

Acabo de probarlo en Windows XP. No responde de inmediato, pero es mucho más rápido que 3 segundos. Se burlará de un cliente para medir el tiempo exacto.

PS Building libevent en Windows no es perfecto! Tuve que jugar con incluye y corregir un error en el código real. Me quedaré con Linux para libevent/Gevent en el futuro;)

0

urllib no es compatible con la reutilización de la conexión http 1.1. Cada vez que obtiene la página, crea una nueva conexión TCP y se produce un nuevo protocolo de enlace TCP. urllib es y siempre será lento con o sin gevent.

+0

si nos fijamos en el código provisto, notará que estaba comparando urllib en ambos casos, así que esta no fue la causa. – djay