2012-04-04 15 views
6

Ich habe eine Reihe von Demos eines TCP-Servers erstellt, aber meine gevent Beispiele sind deutlich langsamer. Ich teste wirklich keine Leistung, aber im Moment macht etwas die gevent-Version 5 mal langsamer.gevent urllib ist langsam

Ich bin sicher, muss sein, wie ich gevent kompiliert, aber kann das Problem nicht lösen. Ich benutze OSX Leopard mit Fink kompilierten Python 2.6 und 2.7. Ich habe sowohl das stabile gevent und gevent 1.0b1 ausprobiert und es verhält sich genauso. Das Echo dauert 5 Sekunden, um zu antworten, wobei die anderen Beispiele < 1sec dauern. Wenn ich den Urllib-Aufruf entferne, verschwindet das Problem.

Ich habe alle den Code in https://github.com/djay/geventechodemo

die Beispiele auszuführen Ich verwende zc.buildout so

$ python2.7 bootstrap.py 
$ bin/buildout 

zu bauen, um GEVENT Beispiel auszuführen:

$ 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 

Diese dauert 3-4 Sekunden, um auf meinem System zu antworten.

jedoch das Gewinde Beispiel

$ bin/py threadecho2.py 

oder das verdrillte Beispiel

$ bin/py twistedecho2.py 

weniger als 1 s. Irgendeine Idee, was ich falsch mache?

+0

es auf meinem lokalen Netzwerk abzuhängen. Bei mir zuhause ist gevent urlib Call langsam im Vergleich zur normalen urlib, aber im Büro sind beide gleich schnell. Sehr eigenartig. – djay

Antwort

0

Gerade versucht, dass auf Windows XP. Reagiert nicht sofort, ist aber viel schneller als 3 Sekunden. Mockt einen Kunden auf, um das genaue Timing zu messen.

PS Building Libevent unter Windows ist nicht einwandfrei! Musste mit includes spielen und einen Bug im eigentlichen Code beheben. Ich bleibe bei Linux für Libevent/Gevent in der Zukunft;)

0

urllib unterstützt http 1.1 Verbindung Wiederverwendung nicht. Jedes Mal, wenn Sie die Seite abrufen, wird eine neue TCP-Verbindung erstellt und ein neuer TCP-Handshake wird ausgeführt. urllib ist und wird immer langsam mit oder ohne gevent sein.

+0

Wenn Sie den bereitgestellten Code betrachten, werden Sie feststellen, dass ich in beiden Fällen urlib verglich habe, so dass dies nicht die Ursache war. – djay