我想用python构建一个json服务。程序将读取一个json文件然后返回。我的文件大小为1 GB。当我运行程序时,我有错误“MemoryError”。我的代码是;
def homepage(request):
file = open("file.json")
json_file = json.load(file)
return JsonResponse(json_file)
任何人都可以帮助我。感谢...
答案 0 :(得分:1)
尝试在内存中读取1GB文件确实不是一个好主意,而FWIW使用" monolithic"巨大数据集的json正在推动边界。根据您的使用情况,这个问题主要有三种解决方案:
前两种解决方案(显然)对消费者"码。在这里,你实际上是"制作人" side(事实上你的json存储在一个平面文件中等等是一个实现细节,完全与客户端无关),所以显而易见的解决方案是将你的json分成大小合适的块并为其分页(最好是添加当前页面,总页数和指向响应中下一页的链接,以使客户端的工作更轻松。)
答案 1 :(得分:0)
你能利用Django的StreamingHttpResponse类吗? https://docs.djangoproject.com/en/2.0/ref/request-response/#django.http.StreamingHttpResponse
来自他们的文档:StreamingHttpResponse类用于将Django的响应流式传输到浏览器。如果生成响应时间过长或占用太多内存,则可能需要执行此操作。例如,它对生成大型CSV文件很有用。它需要一个迭代器,但我认为你可以打开文件,使得每行返回一个迭代器而不是整个文件。