[英]Python memory allocation with pandas and pickle
我正在運行一個python腳本,可以粗略地求和(半偽造),如下所示:
import pandas as pd
for json_file in json_files:
with open(json_file,'r') as fin:
data = fin.readlines()
data_str = '[' + ','.join(x.strip() for x in data) + ']'
df = pd.read_json(data_str)
df.to_pickle('%s.pickle' % json_file)
del df, data, data_str
該過程以迭代方式創建數據幀,將每個數據幀保存為唯一文件。 但是,我的內存似乎在這個過程中被用盡了,好像del df, data, data_str
沒有釋放內存(原來,我沒有在代碼中包含del
語句,但我希望添加它會解決問題 - 它沒)。 在每次迭代期間,大約相同數量的數據被讀入數據幀,大約是我可用內存的3%; 當進程迭代時,每次迭代都會報告%MEM
有3%的ps u | grep [p]ython
(來自我終端中的ps u | grep [p]ython
),最終我的內存被淹沒並且進程被終止。 我的問題是我應該如何更改我的代碼/方法,以便在每次迭代時釋放上一次迭代的內存?
要注意的是,我正在通過Anaconda運行帶有Python 3.5.2的Ubuntu 16.04。
提前感謝您的指導。
在python自動垃圾收集中釋放變量(pandas DataFrame也只是python方面的另一個對象)。 有不同的垃圾收集策略可以調整(需要重要的學習)。
您可以使用手動觸發垃圾回收
import gc
gc.collect()
但是不鼓勵頻繁調用垃圾收集,因為這是一項代價高昂的操作並且可能會影響性能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.