2012-02-05 11 views
4

geventを使用して同時ダウンロードをプルフォームしています。
this例に基づいて、これはコードです:なぜpython geventはシリアルより遅いのですか?

import gevent 
from gevent import monkey 

urls = ['https://www.djangoproject.com/','http://www.nytimes.com/','http://www.microsoft.com'] 
monkey.patch_all() 

import urllib2 
from datetime import datetime 

def print_head(url): 
    print ('Starting %s' % url) 
    data = urllib2.urlopen(url).read() 
    print ('%s: %s bytes: %r' % (url, len(data), data[:50])) 

startTime = datetime.now() 
jobs = [gevent.spawn(print_head, url) for url in urls] 
gevent.joinall(jobs) 
totalTime = datetime.now() - startTime 
print "Total time: %s" % totalTime 

私の問題は、上記のコードは、シリアルバージョンよりもはるかに長い時間がかかり、ほとんどのケースでは、タイムアウトしていることです。

import urllib2 
from datetime import datetime 

urls = ['https://www.djangoproject.com/','http://www.nytimes.com/','http://www.microsoft.com'] 

def print_head(url): 
    print ('Starting %s' % url) 
    data = urllib2.urlopen(url).read() 
    print ('%s: %s bytes: %r' % (url, len(data), data[:50])) 

startTime = datetime.now()  
for url in urls: 
    try: 
     print_head(url) 
    except: 
     print 'ops EXCEPTION :(' 

totalTime = datetime.now() - startTime 
print "Total time: %s" % totalTime 
+0

www.microsoft.comに何かがあります。コードの結果に一貫性がありません。時には 'gevent'が速く、時には' urllib'もあります。そして、microsoft.comのページをダウンロードすることによってほとんどの時間を費やしました。別のURLのリストで試してみてください。 – reclosedev

+0

私はmicrosoft.comとnytimes.comでランダムタイムアウトを取得しています...しかし、geventバージョン...奇妙な... – Carpetsmoker

+0

マネーパッチを無効にすると "問題が解決"されます。もし '' patch_socket() '' ''、 '' patch_dns() ''、 '' patch_httplib() ''のようなものです。私がすべての猿のパッチを無効にした場合、それは2倍の速さです(約1.5秒対3秒の連続したスクリプトが必要です).../ – Carpetsmoker

答えて

1

OK
問題は古いgeventパッケージた:ここにはるかに高速であるシリアルバージョンです。
私はちょうど古いものをアンインストールし、@ reclosedevが指摘したようにhereから新しいものをインストールしました。
これは問題なく動作しています。

+0

私はFreeBSD上で動作しており、同じ問題を抱えています。 gevent 0.13.6 with Python 2.7.2 – Carpetsmoker

+2

公式サイトhttp://code.google.com/p/gevent/downloads/listから更新されたパッケージを試してください。 – reclosedev

+0

@reclosedev 0.13.6は最新の安定バージョンですので、何もありません更新。 1.0は初期のベータ版で、ベータ版での作業を推奨していないことを願っています。 –

関連する問題