0

新的 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"})

无论如何,将光标对象作为块传递给函数。

Ĵ

4

1 回答 1

2

如果您的意思是使用带有多个游标的跳过和限制来加快查询速度,很遗憾,答案可能不是。举个例子,如果你想在 10 个块中返回 1000 个结果,并且线程 10 个游标到每个返回 100 个结果。由于在服务器端实现跳过的方式,每个光标向前跳过的开销可能会超过池的好处。

但是,对于 max_pool_size 的新实现,我不确定您指的是什么——这只是连接数的硬上限。Pymongo 没有支持跨多个线程拆分进程的特定功能。

于 2013-09-17T19:49:21.437 回答