Come evitare di mettere in comune i dati in memoria. Quando iterate cursore di oggetto in pymongo?

StackOverflow https://stackoverflow.com/questions/4502246

  •  12-10-2019
  •  | 
  •  

Domanda

Come evitare di mettere in comune i dati in memoria. Quando iterate cursore di oggetto in pymongo?

Esempio:

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

Prima si va in for ciclo c'è pausa di circa 2 minus. Si carica tutti i dati in memoria prima di iniziare a iterare per qualche motivo. Posso in qualche modo evitarlo?

Se lo faccio in guscio MongoDB è tutto ok.

È stato utile?

Soluzione

Sai se questo è possibile? Se c.db.media.find () restituisce tutto al posto di un iteratore, io non sono sicuro che c'è molto si può fare.

Altri suggerimenti

Guarda il metodo BLOCK_SIZE del cursore. Con esso si dovrebbe essere in grado di impostare quanto si legge in anticipo. Dico dovrebbe, perché sto affrontando alcuni problemi con esso ora ( Come eccezione StopIteration sul prossimo (cursore) quando si modificano batch_size in pymongo ), ma probabilmente sto facendo un errore. BLOCK_SIZE dovrebbe risolvere il problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top