減少django queryset 加載所有對(duì)象的內(nèi)存開銷

當(dāng)使用django ORM時(shí),如果要對(duì)某個(gè)模型的所有數(shù)據(jù)庫行操作時(shí),即調(diào)用all()方法時(shí),返回的數(shù)據(jù)行數(shù)太多,就會(huì)占用大量?jī)?nèi)存,導(dǎo)致問題。
如果使用iterator,分塊來加載指定行數(shù)的數(shù)據(jù),就能有效減少內(nèi)存的占用。

import gc

def querset_iterator(queryset, chucksize=10000):
    pk = 0 
    last_pk = queryset.order_by('-pk')[0]
    queryset.order_by('pk')
    while pk < last_pk:
        for row in queryset.filter(pk__gt=pk)[:chucksize]:
            # 每次讀入內(nèi)存的行數(shù)最大為chucksize
            yield row 
            pk = row.id
        gc.collect()
        # gc垃圾回收

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容