6

TCP サーバーの一連のデモを作成しましたが、私の gevent の例は著しく遅くなります。私は実際にパフォーマンスをテストしていませんが、現時点では gevent バージョンが 5 倍遅くなっています。

gevent をコンパイルした方法に違いないと確信していますが、問題を解決できません。fink でコンパイルされた python 2.6 および 2.7 を使用して OSX ヒョウを使用しています。安定した gevent と gevent 1.0b1 の両方を試しましたが、同じように動作します。エコーの応答には 5 秒かかりますが、他の例では 1 秒未満かかります。urllib 呼び出しを削除すると、問題は解決します。

すべてのコードをhttps://github.com/djay/geventechodemoに入れました

サンプルを実行するには、zc.buildout を使用してビルドします

$ python2.7 bootstrap.py
$ bin/buildout

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

私のシステムでは、応答に 3 ~ 4 秒かかります。

ただし、スレッド化された例

$ bin/py threadecho2.py

またはねじれた例

$ bin/py twistedecho2.py

1 秒未満です。私が間違っていることは何か分かりますか?

4

3 に答える 3

1

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

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

GEVENT_RESOLVER=thread を設定すると、期待どおりの速度で動作しました

于 2012-08-19T23:35:59.270 に答える
0

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

PS Windows での libevent の構築は完璧ではありません! インクルードをいじって、実際のコードの 1 つのバグを修正する必要がありました。将来的には、libevent/Gevent 用に Linux に固執します ;)

于 2012-04-04T12:02:29.797 に答える
0

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

于 2012-08-18T16:10:04.187 に答える