新しい pymongo2.6 では、プロセスを複数のスレッドに分割できます。とても便利だと思います。
from multiprocessing import Pool
import pymongo
connection = pymongo.MongoClient(max_pool_size=8)
def update(id):
connection.update({"_id":id},{"$set":{"field":"blah_blah"}},upsert=True)
p = Pool(8)
p.map(update,list_of_ids)
これはうまくいきます。しかし、コレクションのクエリを分割できるかどうか疑問に思っていましたか? カーソル オブジェクトが既にチャンクに分割されていることはわかっていますが、スレッドの同時実行性を使用してクエリを高速化する方法はありますか?
何かのようなもの...
list_of_ids = []
def get_ids(chunk_of_cursor):
for i in chunk_of_cursor:
list_of_ids.append(i['_id'])
p = Pool(8)
p.map(get_ids,connection.find({"field":"somecriteria"})
とにかく、カーソルオブジェクトをチャンクとして関数に渡します。
J