0

所以我在网络上有几台机器运行 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())
  • 然而,这是一个接一个的,可能会很慢。
  • 如何一次发送所有请求?我对线程非常不熟悉(这是我应该研究的吗?)
4

1 回答 1

2
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()

多处理库专为此类任务而设计。如果您愿意,可以将最终map调用替换为 for 循环。

此处描述了使用多处理模块进行 Map/Reduce 任务的一般描述:http: //mikecvet.wordpress.com/2010/07/02/parallel-mapreduce-in-python/

于 2013-01-08T22:20:05.443 回答