Django ORM не освобождает память даже при явном вызове сборщика мусора
Похоже, что объекты ORM не освобождают память - пожалуйста, посмотрите код ниже.
Я пробовал различные подходы, но ничего не помогло:
- Вручную вызовите gc.collect()
- Вручную отключите и включите gc
- Используйте queryset
- Используйте итераторы
- Используйте списки
В реальном случае я запрашиваю около 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