我有一个队列端点(Celery),它在处理它们之前会消耗一批消息,然后将它们全部写入一个临时文件以供另一个进程(Spark集群)使用。它基本上是一个巨大的dicts列表,用JSON编码。
[{'id':1,'content'=...},{'id':2,'content'=...},{'id':3,'content'=...}.....]
但我们将所有消息保留在内存中,然后json.dumps
也会在内存中生成一个大字符串。那么我能把它全部存储在内存中吗?我可以在邮件到达时将邮件转储到文件中,因此它不会消耗太多内存吗?
答案 0 :(得分:1)
编写自己的JSON编码器以实现高效的json编码。或者只需通过传入文件指针(如对象)来使用json.dump
。
另外,在使用数据时不要将整个json文件读入内存。使用json.load
代替json.loads
,并使用标准Python iterator interface