【发布时间】:2011-10-17 20:39:48
【问题描述】:
我最近尝试使用多处理模块(和它的工作人员池)。我在这里阅读了几个关于多线程(与标准的非线程版本相比减慢了整个过程)和多处理的讨论,但我找不到一个(可能非常简单的)问题的答案:
你能通过多处理加速 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]
【问题讨论】:
-
编辑:使用 30 个进程,有一个显着的加速(如果我的措施没有混淆/偏见由于 tue 连接限制,缓存相关的东西等)
-
30 个进程有多少个处理器? @dorvak
标签: python multiprocessing urllib2 gil