Бесполезна многопроцессорная обработка с urllib2?

Недавно я попытался ускорить небольшой инструмент (который использует urllib2 для отправки запроса на (неофициальный) twitter-button-count-url (> 2000 URL-адресов) и анализирует его результаты) с помощью модуля многопроцессорности (и его рабочих пулов). Я прочитал здесь несколько дискуссий о многопоточности (которая замедлила все это по сравнению со стандартной, непоточной версией) и многопроцессорность, но я не смог найти ответа на (вероятно, очень простой) вопрос:

Можете ли вы ускорить url-вызовы с помощью многопроцессорности или узким местом чего-то вроде сетевого адаптера? Я не понимаю, какой часть, например, метода urllib2-open-method может быть распараллелена и как это должно работать ...

РЕДАКТИРОВАТЬ: Это запрос, который я хочу ускорить d текущая настройка многопроцессорности:

 urls=["www.foo.bar", "www.bar.foo",...]
 tw_url='http://urls.api.twitter.com/1/urls/count.json?url=%s'

 def getTweets(self,urls):
    for i in urls:
        try:
            self.tw_que=urllib2.urlopen(tw_url %(i))
            self.jsons=json.loads(self.tw_que.read())
            self.tweets.append({'url':i,'date':today,'tweets':self.jsons['count']})
        except ValueError:
            print ....
            continue
    return self.tweets 

 if __name__ == '__main__':
    pool = multiprocessing.Pool(processes=4)            
    result = [pool.apply_async(getTweets(i,)) for i in urls]
    [i.get() for i in result]
9
задан Uli Köhler 5 January 2014 в 02:59
поделиться