如何连接远程MongoDB调用?

时间:2013-01-08 21:35:55

标签: python mongodb python-multithreading

所以我在运行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())
  • 然而,这是一个一个地做,可能会很慢。
  • 如何立即发出所有请求?我对线程非常不熟悉(这是我应该调查的内容吗?)

1 个答案:

答案 0 :(得分: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/