2012-04-04 91 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