2012-03-23 35 views
2

我有一個內存問題mongoengine(在Python中)。這是否可以用mongoengine(python)懶洋洋地查詢數據庫?

比方說,我有一個非常大量的custom_documents(幾千)。 我要處理它們,就像這樣:

for item in custom_documents.objects(): 
    process(item) 

的問題是custom_documents.objects()裝載在內存中的對象和我的應用程序使用幾個GB ...

我該怎麼做才能讓更多的內存明智? 有沒有辦法讓mongoengine懶洋洋地查詢數據庫(當我們在queryset上迭代時它會請求對象)?

回答

4

根據docs(以我的經驗),collection.objects返回一個懶惰的QuerySet。你的第一個問題可能是你調用了objects屬性,而不是僅僅將它用作迭代器。我覺得你的應用程序需要使用如此多的內存,可能process(object)會以某種方式存儲對它的引用嗎?試試下面的代碼並檢查應用程序的內存使用情況:

queryset = custom_documents.objects 
print queryset.count() 

由於QuerySets是懶惰的,你可以以僅返回對象500-600做這樣的事情custom_documents.limit(100).skip(500)爲好。

+0

你說得對,問題出在我的過程函數中,它在某處存儲引用。謝謝你回答:) – Oos 2012-03-23 15:29:22

相關問題