1 回答

TA貢獻1831條經驗 獲得超9個贊
我是dill作者。您可能想嘗試klepto這種情況。 dill(實際上是任何序列化程序)都將整個dict對象視為一個對象……而這種大小的東西,您可能希望更像是一個條目數據庫……這是klepto可以做的。最快的方法可能是使用存檔,將每個條目視為磁盤上單個目錄中的不同文件:
>>> import klepto
>>> x = range(10000)
>>> d = dict(zip(x,x))
>>> a = klepto.archives.dir_archive('foo', d)
>>> a.dump()
以上創建了一個包含10000子目錄的目錄,每個目錄中都有一個條目。鍵和值都被存儲。請注意,您也可以稍微調整序列化方法,因此請查看文檔以了解如何為您的自定義案例執行此操作。
或者,您可以遍歷 dict,并在并行映射中使用 dump 序列化每個條目multiprocess.Pool。
(側面說明,我的作者multiprocess和klepto也)。
更新:當問題從序列化一個巨大的字典變為序列化一個巨大的小字典列表時......這改變了答案。
klepto是為大型dict結構而構建的,所以它可能不是你想要的。您可能想嘗試dask,它是為大型array結構而構建的。
我認為您還可以遍歷列表,單獨序列化每個列表條目......只要您以相同的順序加載它們,您就可以重新構建您的結果。你可以做一些事情,比如用值存儲位置,這樣你就可以恢復列表,然后在它們亂序時進行排序。
我還請您考慮是否可以將結果重組為更好的形式...
添加回答
舉報