所以我有一些机器在网络上运行MongoDB:
- 我可以很容易地编写代码从我的PC连接到一个,并返回一个结果集,例如:
from pymongo import Connection c = Connection("10.130.10.12") some_data = c.MyData.MyCollection.find_one()
- 如果我有100台服务器要连接,并想把它放在一个循环中,这也很容易:
all_data = [] for server in my_list_of_servers: c = Connection(server) all_data.append(c.MyData.MyCollection.find_one())
- 然而,这是一个接一个的,可能会相当慢。
- 我如何一次发送所有请求?我对线程非常不熟悉(这是我甚至应该研究的吗?)
from multiprocessing import Pool
def connectAndCollect(server):
c = Connection(server)
return c.MyData.MyCollection.find_one()
pool = Pool(processes=10)
res = pool.map(connectAndCollect,servers)
map(lambda x: all_data.append(x),res)
pool.close()
multiprocessing库就是为这类任务设计的。如果愿意,最后的map
调用可以用for循环代替。
在Map/Reduce任务中使用multiprocessing模块的描述如下:http://mikecvet.wordpress.com/2010/07/02/parallel-mapreduce-in-python/