我已經編寫了一個多線程的Web搜尋器,用於收集要寫入非常大的csv文件的數據。唯一的問題是,該程序目前正在使用大量內存(擁有15GB內存,我的計算機的所有物理內存都在使用)。我不知道Python是如何管理後臺的內存,但程序似乎是功能,但我經常得到這些暫停,我認爲這是與python或系統做一些「記憶魔術」背景。唯一的可能是CPU使用率。逐步將CSV數據寫入硬盤以減少內存使用量
無論如何,我認爲逐步將數據寫入硬盤以減少內存使用量會有所幫助。我沒有對數據做任何額外的操作,所以我真的不需要它在內存中。
我想我可以做這樣的事情:
# out_queue is queue.Queue() object containing data to be written
def csv_writer(out_queue):
with open(file, 'w+') as csvfile:
writer = csv.writer(csvfile,delimiter=',')
while True:
task = out_queue.get()
writer.writerow(task)
task.task_done()
但我不是不知道open
功能是如何工作的,閱讀它說,返回一個文件對象的文件,但我不確定那真的意味着什麼。所以我想這裏的主要問題是:
如果我使用的是with open
語句,打開的文件是否保存在內存中?閱讀文檔並沒有特別的幫助我。
我也讀了一些關於打開緩衝文件,在這種情況下會有幫助嗎?
如果您有任何其他提示,對於那些處理這類問題的人,有沒有更好的解決方法?或者我應該把它留給python來處理?
對不起,可能沒有解釋清楚,我的記憶問題是因爲我把所有從網上抓取的數據都保存在內存中。目前該程序的結構可以在所有我的刮刀線程退出後將所有數據寫入文件。 –