6

我已经创建了一组 TCP 服务器的演示,但是我的 gevent 示例明显变慢了。我真的没有测试性能,但目前有些东西使 gevent 版本慢了 5 倍。

我确定一定是我编译 gevent 但无法解决问题的方式。我正在使用 fink 编译的 python 2.6 和 2.7 使用 OSX leopard。我已经尝试过稳定的 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

小于1s。知道我做错了什么吗?

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 并非完美无缺!必须使用包含并修复实际代码中的一个错误。将来我会坚持使用 Linux for libevent/Gevent ;)

于 2012-04-04T12:02:29.797 回答
0

urllib 不支持 http 1.1 连接重用。每次您获得该页面时,它都会创建一个新的 TCP 连接并发生新的 TCP 握手。无论有没有 gevent,urllib 都会很慢。

于 2012-08-18T16:10:04.187 回答