утечка памяти в оболочке django, сериализаторе остальной структуры django и cassandra - PullRequest
0 голосов
/ 03 февраля 2019

У меня есть модель django cassandra, подобная этой:

class Milad(DjangoCassandraModel):
name = columns.Text(primary_key=True)
bulkid = columns.BigInt(primary_key=True)
f1 = columns.UUID()
f2 = columns.UUID()
f3 = columns.UUID()
f4 = columns.UUID()
f5 = columns.UUID()
f6 = columns.UUID()
f7 = columns.UUID()
f8 = columns.UUID()
f9 = columns.UUID()
f10 = columns.UUID()

class Meta:
    get_pk_field = "bulkid"

и следующий сериализатор:

from rest_framework import serializers

class BulkidSerializer(serializers.Serializer):
    bulkid = serializers.IntegerField()

    def to_representation(self, instance):
        return instance.bulkid

В моей таблице 220200 записей.когда я открываю оболочку django с помощью команды python3 manage.py shell a, выполняю следующие операции, использование моей памяти из 8,8 ГБ увеличивается до 10,8 ГБ.

операций:

records = Milad.objects.all().limit(None)
data = BulkidSerializer(records, many=True).data

после операции при использованииsys.getsizeof(data) размер объекта составляет около 2 МБ, но моя память по-прежнему составляет 10,8, когда не выполняется никакая операция, и в моей памяти нет данных с таким размером, пока я не закрою оболочку.в чем проблема?

1 Ответ

0 голосов
/ 16 мая 2019

Материализация всех результатов в памяти за один раз приведет к скачку использования памяти.Нередко среда исполнения Python расширяет память и не сразу возвращает ее в ОС.Это не должно вызывать беспокойства, если вы не ограничиваете ресурсы.

Если вы хотите избежать материализации всех результатов в памяти, вы должны использовать подкачку, предоставляемую драйвером.

По токену с cqlengine

Пейджинг в драйвере

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...