我怎么能线程我的远程MongoDB调用



所以我有一些机器在网络上运行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/

相关内容

  • 没有找到相关文章

最新更新