Сериализация набора запросов в JSON занимает много времени. Как я могу отладить это?

Я сериализирую объекты модели Django партиями по 10000 как json и отправляю их. Для этого я использую DjangoFullSerializer из wadofstuff, так как я также хотел, чтобы связанное поле было сериализовано вместе с моим объектом. Во время пиковой нагрузки на сервер одной партии требуется около 9-10 минут для завершения. Выборка 10000 объектов MySQL занимает где-то 1-2 секунды. Я не уверен, что сериализация в JSON может сделать так много времени. Я попытался использовать simplejson (который не дает возможность сериализации связанных полей), но времени все еще достаточно много. Я не уверен, но я думаю, что wadofstuff использует simplejson за экраном. Я не смог настроить cjson с Django, поэтому не смог проверить это. Но как я могу настроить оптимально или улучшить использование текущей настройки. Мне кажется, что после того, как данные были извлечены в память, преобразование 10000 объектов в JSON не займет много времени. Я прилагаю дамп профиля, полученный с помощью cProfile. Пожалуйста, посмотрите и предложите некоторые советы / подсказки / помощь.

Вложение: файл дампа cProfile

Заранее спасибо.

Обновление 1: также пишу код, который я использую для тестирования. Я запускаю это в оболочке.

import cProfile
from dashboard.models import *
from django.core import serializers
from datetime import datetime

start = end = None
def myfunc():
 global start, end
 start = datetime.now()
 us = UserPermission.objects.filter(username = 54).values_list('district_operated', flat=True)
 villages = list(Village.objects.filter(block__district__id__in = us))
 offset = 0
 limit = 10000
 screenings = Screening.objects.select_related('village').filter(village__in = villages).distinct().order_by("-id")[offset:limit]
 x = list(screenings)
 json_subcat = serializers.serialize("json", screenings, relations=('village',))
 end = datetime.now()


cProfile.runctx("myfunc()", globals(), locals(), 'dump.profile')

0 ответов

Другие вопросы по тегам