2012-04-04 88 views
6

我创建了一套TCP服务器的演示,但是我的gevent示例显然比较慢。我真的没有测试性能,但目前正在使gevent版本变慢5倍。gevent urllib很慢

我确定必须是我如何编译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秒。任何想法我做错了什么?

+0

这似乎取决于我的本地网络上工作。在我的家gevent urlib调用比正常的urlib慢,但在办公室他们都是相同的速度。很奇怪。 – djay 2012-04-05 01:28:57

回答

0

刚刚在Windows XP上试过。不立即响应,但比3秒快得多。会模拟客户来衡量确切的时间。

Windows上的PS Building libevent并非完美无缺!必须玩包含并修复实际代码中的一个错误。我将在未来坚持Linux for libevent/Gevent;)

0

urllib不支持http 1.1连接重用。 每次获取页面时,都会创建一个新的TCP连接并发生新的TCP握手。 urllib总是会很慢,有或没有gevent。

+0

如果你看看提供的代码,你会注意到我在两种情况下都比较了urllib,所以这不是原因。 – djay 2012-08-19 23:16:48