首页 > 解决方案 > json.dumps 需要太多时间来转换数据

问题描述

我正在使用json.dumps我的 Django 模型制作一些报告。

    start = time.process_time()
    items = Allotment.objects.all().order_by('dispatch_date')
    print("allotments", len(items))
    serializer = AllotmentFloatingSerializer(items, many=True)
    items_json = json.dumps(serializer.data)
    print("allot time", time.process_time() - start)

我检查了查询和序列化的时间,它太小以至于无法注意到,但json.dumps需要太多时间,有时甚至是几分钟。我应该怎么做才能减少这个处理时间?

序列化程序.py

class FloatingKitsSerialzer(serializers.ModelSerializer):

    class Meta:
        model = Kit
        fields = ('kit_name', 'kit_type')


class AllotmentFlowsSerializer(serializers.ModelSerializer):

    flow = serializers.SlugRelatedField( read_only=True, slug_field='flow_name')
    kit = FloatingKitsSerialzer(many=False)
    class Meta:
        model = AllotmentFlow
        fields =('flow', 'kit', 'alloted_quantity')


class AllotmentFloatingSerializer(serializers.ModelSerializer):

    flows = AllotmentFlowsSerializer(many=True)

    class Meta:
        model = Allotment
        fields = ('transaction_no', 'dispatch_date', 'flows')

标签: pythonjsondjango

解决方案


你不是在衡量所花费的时间json.dumps()。你正在衡量时间

  • 数据库和 Django ORM
  • AReportSerializer 用来形成数据(当你访问时发生serializer.data
  • 实际的 JSON 序列化。
start = time.process_time()
items = Allotment.objects.all().order_by("dispatch_date")
print("allotments", len(items))
print("query time", time.process_time() - start)
serializer = AReportSerializer(items, many=True)
data = serializer.data
print("data time", time.process_time() - start)
items_json = json.dumps(data)
print("json time", time.process_time() - start)

那里会更接近真相。

无论哪种方式,如果即使该基准测试确实证明它json.dumps正在度过美好的时光,那么该orjson库是一个更快的替代json...


推荐阅读