Python Django打开庞大的文件

时间:2018-01-12 09:04:16

标签: python json django memory

我想用python构建一个json服务。程序将读取一个json文件然后返回。我的文件大小为1 GB。当我运行程序时,我有错误“MemoryError”。我的代码是;

def homepage(request):
  file = open("file.json")
  json_file = json.load(file)
  return JsonResponse(json_file)

任何人都可以帮助我。感谢...

2 个答案:

答案 0 :(得分:1)

尝试在内存中读取1GB文件确实不是一个好主意,而FWIW使用" monolithic"巨大数据集的json正在推动边界。根据您的使用情况,这个问题主要有三种解决方案:

  1. 使用像ijson
  2. 这样的流式json解析器
  3. 使用jsonlines format
  4. 当然最明显的是:对你的json内容进行分页(这是大多数现有的rest / json API所做的事情)
  5. 前两种解决方案(显然)对消费者"码。在这里,你实际上是"制作人" side(事实上你的json存储在一个平面文件中等等是一个实现细节,完全与客户端无关),所以显而易见的解决方案是将你的json分成大小合适的块并为其分页(最好是添加当前页面,总页数和指向响应中下一页的链接,以使客户端的工作更轻松。)

答案 1 :(得分:0)

你能利用Django的StreamingHttpResponse类吗? https://docs.djangoproject.com/en/2.0/ref/request-response/#django.http.StreamingHttpResponse

来自他们的文档:StreamingHttpResponse类用于将Django的响应流式传输到浏览器。如果生成响应时间过长或占用太多内存,则可能需要执行此操作。例如,它对生成大型CSV文件很有用。它需要一个迭代器,但我认为你可以打开文件,使得每行返回一个迭代器而不是整个文件。