簡體   English   中英

使用pandas和pickle進行Python內存分配

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM