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())
  • ただし、これは1つずつ実行されるため、非常に遅くなる可能性があります。
  • 一度にすべてのリクエストを送信するにはどうすればよいですか? 私はスレッド化に非常に慣れていません (それは私が調べるべきことですか?)
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 タスクに multiprocessing モジュールを使用する方法については、http: //mikecvet.wordpress.com/2010/07/02/parallel-mapreduce-in-python/を参照してください。

于 2013-01-08T22:20:05.443 に答える