Ответ 1
Ускорение обхода в основном Eventlet основного варианта использования. Это очень быстро - у нас есть приложение, которое должно ударить 2 000 000 URL-адресов за несколько минут. Он использует самый быстрый интерфейс событий в вашей системе (epoll, вообще) и использует greenthreads (которые построены поверх сопрограмм и очень недороги), чтобы упростить запись.
Здесь пример из документов:
urls = ["http://www.google.com/intl/en_ALL/images/logo.gif",
"https://wiki.secondlife.com/w/images/secondlife.jpg",
"http://us.i1.yimg.com/us.yimg.com/i/ww/beta/y3.gif"]
import eventlet
from eventlet.green import urllib2
def fetch(url):
body = urllib2.urlopen(url).read()
return url, body
pool = eventlet.GreenPool()
for url, body in pool.imap(fetch, urls):
print "got body from", url, "of length", len(body)
Это довольно хорошая отправная точка для разработки более полнофункционального искателя. Не стесняйтесь появляться в #eventlet на Freenode, чтобы обратиться за помощью.
[обновление: я добавил в документы более сложный рекурсивный пример веб-искателя. Клянусь, что это было в работах до того, как этот вопрос был задан, но вопрос, наконец, вдохновил меня на его завершение.:)]