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
www.microsoft.comに何かがあります。コードの結果に一貫性がありません。時には 'gevent'が速く、時には' urllib'もあります。そして、microsoft.comのページをダウンロードすることによってほとんどの時間を費やしました。別のURLのリストで試してみてください。 – reclosedev
私はmicrosoft.comとnytimes.comでランダムタイムアウトを取得しています...しかし、geventバージョン...奇妙な... – Carpetsmoker
マネーパッチを無効にすると "問題が解決"されます。もし '' patch_socket() '' ''、 '' patch_dns() ''、 '' patch_httplib() ''のようなものです。私がすべての猿のパッチを無効にした場合、それは2倍の速さです(約1.5秒対3秒の連続したスクリプトが必要です).../ – Carpetsmoker