2012-04-04 17 views
6

Stworzyłem zestaw demonstracji serwera TCP, ale moje przykłady gevent są znacznie wolniejsze. Naprawdę nie testuję wydajności, ale w tej chwili coś sprawia, że ​​wersja gevent 5 razy wolniej.gevent urllib jest powolny

Jestem pewna, że ​​musiałem opracować geentę, ale nie mogę rozwiązać problemu. Używam lamparta OSX przy użyciu skompilowanego pythona 2.6 i 2.7. Próbowałem zarówno stabilny gevent i gevent 1.0b1 i działa tak samo. Echo trwa 5 sekund, aby odpowiedzieć, gdzie inne przykłady zajmują 1 sekundę. Jeśli usunę wywołanie urllib, problem zniknie.

umieścić cały kod w https://github.com/djay/geventechodemo

Aby uruchomić przykłady Używam zc.buildout więc budować

$ python2.7 bootstrap.py 
$ bin/buildout 

Aby uruchomić gevent przykład:

$ 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 

ten zajmie 3-4 sekundy, aby odpowiedzieć na mój system.

Jednak gwintowany przykład

$ bin/py threadecho2.py 

lub skręcone przykład

$ bin/py twistedecho2.py 

Czy mniej niż 1s. Masz pojęcie, co robię źle?

+0

To wydaje się zależeć od sieci lokalnej. W moim domu geven urlib call jest powolny w porównaniu do normalnego urlib, ale w biurze mają one tę samą prędkość. Bardzo dziwny. – djay

Odpowiedz

0

Próbowałem tego w systemie Windows XP. Nie reaguje natychmiast, ale jest znacznie szybszy niż 3 sekundy. Sporządzimy makietę klienta, aby zmierzyć dokładny czas.

PS Budowanie libevent na Windowsie nie jest bezbłędne! Musiał grać z włączaniem i naprawianiem jednego błędu w rzeczywistym kodzie. Pozostanę przy Linuksie dla libevent/Gevent w przyszłości;)

0

urllib nie obsługuje ponownego użycia protokołu http 1.1. Za każdym razem, gdy pobierasz stronę, tworzy ona nowe połączenie TCP i następuje nowy handshake TCP. Urllib jest i zawsze będzie powolny z lub bez gevent.

+0

jeśli spojrzysz na podany kod, zauważysz, że porównywałem urllib w obu przypadkach, więc nie było to przyczyną. – djay