gevent urllib很慢

时间:2012-04-04 05:24:57

标签: python gevent

我已经创建了一组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秒。知道我做错了吗?

3 个答案:

答案 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都会很慢。