0

データをメモリにプールしないようにする方法。pymongoでカーソルオブジェクトを反復するとき?

例:

def iter():
    c=pymongo.Connection()
    cursor=c.db.media.find().skip(0).limit(50000)
    for item in cursor:
        yield item

サイクル forに入る前に、約2マイナスの休止があります。何らかの理由で反復を開始する前に、すべてのデータをメモリにロードします。どういうわけかそれを避けることができますか?

私がmongodbシェルでそれを行う場合、すべてが大丈夫です。

4

2 に答える 2

0

これが可能かどうか知っていますか?c.db.media.find()がイテレータではなくすべてを返す場合、できることがたくさんあるかどうかはわかりません。

于 2010-12-21T18:01:28.783 に答える
0

カーソルのblock_sizeメソッドを見てください。これを使用すると、事前に読む量を設定できるはずです。私は今それでいくつかの問題に直面しているので(pymongoでbatch_sizeを変更するときにnext(cursor)でStopIteration例外を取得する) 、そうすべきだと言いますが、おそらくいくつかの間違いを犯しています。block_sizeで問題が解決するはずです。

于 2014-06-02T04:15:46.147 に答える