2012-04-04 11 views
6

私は、TCPサーバのデモのセットを作成しましたが、これは非常に遅いです。私は実際にパフォーマンスをテストしていませんが、現時点では何かがgeventバージョンを5倍遅くしています。gevent urllibが遅い

私はgeventをどのようにコンパイルしたのでしょうが、問題を解決することはできません。私はOSX leopardをfinkでコンパイルしたPython 2.6と2.7を使用しています。私は安定したgeventとgevent 1.0b1の両方を試しました。エコーは応答するのに5秒かかるが、他の例では< 1秒となる。 urllibコールを削除すると問題が解決します。

私はgevent例を実行するには

$ python2.7 bootstrap.py 
$ bin/buildout 

を構築するので、zc.buildout使用している例を実行するにはhttps://github.com/djay/geventechodemo

内のすべてのコードを配置:

$ 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 

これを私のシステムで応答するのに3〜4秒かかります。ねじ例

$ bin/py threadecho2.py 

又はねじれ例

$ bin/py twistedecho2.py 

が1秒未満であるが

。私が間違っていることは何か考えていますか?

+0

として働かせました。私の家のgevent urlib呼び出しは通常のurlibに比べて遅いですが、オフィスでは両方とも同じ速度です。非常に奇妙な。 – djay

答えて

1

答えは、この会話で概説されているデフォルトのDNSリゾルバを変更したものです。

https://groups.google.com/forum/#!topic/gevent/5uNfkdgzWVc

設定GEVENT_RESOLVER =スレッドは、それが期待されるスピード私のローカルネットワークに依存しているようだ

0

Windows XPで試してみました。すぐには反応しませんが、3秒よりもずっと早いです。正確なタイミングを測定するためにクライアントをモックアップします。

PS Windowsでlibeventをビルドするのは完璧ではありません!インクルードで試して、実際のコードに1つのバグを修正する必要がありました。 libevent/GeventのLinuxを将来使用するつもりです)

0

urllibはhttp 1.1接続の再利用をサポートしていません。 ページを取得するたびに、新しいTCP接続が作成され、新しいTCPハンドシェイクが発生します。 urllibはgeventの有無にかかわらず常に遅くなります。

+0

あなたが提供したコードを見れば、私は両方のケースでurllibを比較していたことに気付くでしょう。これが原因ではありませんでした。 – djay