私は最近、小さなツール (urllib2 を使用して (非公式)twitter-button-count-url (> 2000 URL) にリクエストを送信し、その結果を解析する) をマルチプロセッシング モジュール (およびそれのワーカープール)。ここで、マルチスレッド (標準の非スレッド バージョンと比較して全体が遅くなる) とマルチプロセッシングに関するいくつかの議論を読みましたが、(おそらく非常に単純な) 質問に対する答えを見つけることができませんでした。
マルチプロセッシングで URL 呼び出しを高速化できますか、それともネットワーク アダプターのようなボトルネックではありませんか? たとえば、urllib2-open-method のどの部分を並列化できるのか、どのように機能するのかわかりません...
編集:これは私がスピードアップしたいリクエストと現在のマルチプロセッシングセットアップです:
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]