我已经创建了一组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
小于1秒。知道我做错了吗?
答案 0 :(得分:1)
答案是更改此会话中概述的默认DNS解析程序。
https://groups.google.com/forum/#!topic/gevent/5uNfkdgzWVc
设置GEVENT_RESOLVER =线程使其工作为预期速度
答案 1 :(得分:0)
在Windows XP上尝试过。没有立即响应,但比3秒快得多。将模拟客户端以测量确切的时间。
PS构建在Windows上的解放并不完美!不得不在实际代码中使用include和修复一个bug。我将来会坚持使用Linux来获取libevent / Gevent;)
答案 2 :(得分:0)
urllib不支持http 1.1连接重用。 每次获取页面时,它都会创建一个新的TCP连接并发生新的TCP握手。 无论有没有gevent,urllib都会很慢。