Comment les données de mise en commun d'éviter dans la mémoire. Lorsque itérer curseur en objet pymongo?
Question
Comment éviter la mise en commun des données en mémoire. Lorsque itérer curseur en objet pymongo?
Exemple:
def iter():
c=pymongo.Connection()
cursor=c.db.media.find().skip(0).limit(50000)
for item in cursor:
yield item
Avant cela va dans le cycle for
il y a une pause d'environ 2 moins. Il charge toutes les données en mémoire avant de commencer à itérer pour une raison quelconque. Puis-je éviter en quelque sorte il?
Si je le fais dans la coquille de MongoDB tout est ok.
La solution
Savez-vous si cela est possible? Je ne suis pas sûr qu'il ya beaucoup que vous pouvez faire si c.db.media.find () retourne tout au lieu d'un iterator,.
Autres conseils
à la méthode block_size du curseur. Avec elle, vous devriez être en mesure de définir à quel point vous lisez à l'avance. Je dis devrait, parce que je suis confronté à des problèmes maintenant ( Obtenir exception StopIteration sur suivant (curseur) lors de la modification batch_size dans pymongo ), mais je suis probablement fait une erreur. block_size devrait résoudre votre problème.