It seems like ORM objects are not releasing memory - please refer code below.
I tried various approaches like, but nothing helped:
- Manually call gc.collect()
- Manually disable and enable gc
- Use queryset
- Use iterators
- Use lists
In actual case, I query about 60K articles, and would like the memory to be released as soon as I am out of the function. The memory is not released even after days. So, I guess its not an issue with garbage collector.
Please suggest.
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