Come evitare di mettere in comune i dati in memoria. Quando iterate cursore di oggetto in pymongo?
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.
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.