python - 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')
解决方案
你不是在衡量所花费的时间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
...
推荐阅读
- 64-bit - 64 位虚拟地址空间大小
- python-3.x - 如何使用 GOOGLE_APPLICATION_CREDENTIALS 环境变量来签署 Cloud Storage URL?
- javascript - 如何用javascript中的新数据重新加载页面?
- git - 什么是 git 命令来更改模式中的远程文件名?
- google-app-engine - Google App Engine 从 PNG 文件签名中删除回车,损坏图像
- python - 余弦相似度输出不同的scipy vs sklearn
- three.js - aframe 视频播放暂停
- python - 返回 None 类型值的函数
- python - 将多表excel工作簿拆分为多个工作簿
- c - 中断未触发。关于为什么会这样的任何想法?