Django ORM не освобождает память даже при явном вызове сборщика мусора

Похоже, что объекты ORM не освобождают память - пожалуйста, посмотрите код ниже.

Я пробовал различные подходы, но ничего не помогло:

  1. Вручную вызовите gc.collect()
  2. Вручную отключите и включите gc
  3. Используйте queryset
  4. Используйте итераторы
  5. Используйте списки

В реальном случае я запрашиваю около 60K статей, и хотел бы, чтобы память освобождалась, как только я выхожу из функции. Память не освобождается даже через несколько дней. Поэтому я думаю, что это не проблема со сборщиком мусора.

Пожалуйста, предложите.

import gc
import os
import django
import psutil

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
django.setup()

from api.models import Article

def fetch_articles():
    # gc.disable()  # no help
    articles = Article.objects.order_by('-id')[:10].iterator()
    # articles = Article.objects.order_by('-id')[:10]  # similar memory consumption
    # articles = list(Article.objects.order_by('-id')[:10])  # similar memory consumption

    for article in articles:
        pass
    del article
    del articles
    # gc.enable()  # no help
    gc.collect()


# gc.collect()  # no help
process = psutil.Process(os.getpid())
print(process.memory_info().rss / (1024 * 1024), "MB")  # 41.203125 MB
fetch_articles()
# gc.collect()  # no help
print(process.memory_info().rss / (1024 * 1024), "MB")  # 44.21875 MB
Вернуться на верх