1

我将 10000 个批量的 Django 模型对象序列化为 json 并发送它们。我正在使用DjangoFullSerializers从 wadofstuff 来执行此操作,因为我还希望将相关字段与我的对象一起序列化。在服务器负载高峰期间,一批大约需要 9-10 分钟才能完成。获取 10000 个 MySQL 对象需要 1-2 秒。我不确定 JSON 的序列化可能会采取什么措施来承担如此多的开销。我尝试过使用 simplejson(它没有提供序列化相关字段的选项),但是花费的时间仍然足够长。我不确定,但我认为,wadofstuff 在屏幕后面使用 simplejson。我无法使用 Django 配置 cjson,因此无法对此进行测试。但是我怎样才能优化配置或改进当前设置的使用。直觉上,我觉得,一旦数据被提取到内存中,将 10000 个对象转换为 JSON 应该不会花这么长时间。我正在附加使用 cProfile 获取的配置文件转储。请看一下并提出一些建议/提示/帮助。

附件:cProfile 转储文件

提前致谢。

更新 1:还编写了我用于测试的代码。我在 shell 中运行它。

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')
4

0 回答 0