2013-07-11 44 views
2

我有一個隊列端點(Celery)在處理它們之前消耗一批消息,然後將它們全部寫入臨時文件以供另一個進程(Spark集羣)使用。它基本上是一個巨大的字典列表,以JSON編碼。巨大的JSON列表沒有吃掉所有的內存

[{'id':1,'content'=...},{'id':2,'content'=...},{'id':3,'content'=...}.....] 

但我們保留在內存中的所有郵件,然後json.dumps也產生在大內存字符串。那麼我可以做得比將所有內容存儲在內存中更好嗎?我可以在文件到達時將消息轉儲到文件中,因此它不會消耗太多的內存嗎?

+0

你必須看看處理這些消息的代碼,並可能立即寫入文件。我不知道這些文件有多大,但是如果它們足夠大,可以考慮滑動窗口mmap:https://pypi.python.org/pypi/smmap。 – dilbert

回答

1

編寫您自己的JSON編碼器以實現高效的json編碼。或者通過傳入類似對象的文件指針來使用json.dump

此外,消耗數據時不要將整個json文件讀入內存。使用json.load而不是json.loads,並使用標準Python iterator interface

相關問題