【发布时间】:2014-08-03 22:25:16
【问题描述】:
我编写了一个多线程网络爬虫,它收集数据并最终写入一个非常大的 csv 文件。唯一的问题是,该程序目前正在使用大量内存(内存为 15gb 以上,我的计算机的所有物理内存都在使用)。我不确定python是如何在后台管理内存的,但是程序似乎仍然可以正常工作,但是我确实经常遇到这些停顿,我认为这与python或系统在背景。唯一可能是 CPU 使用率。
无论如何,我认为将数据逐步写入硬盘以减少内存使用量会有所帮助。我没有对数据做任何额外的操作,所以我真的不需要它在内存中。
我在想我可以这样做:
# 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来处理?
【问题讨论】:
-
对不起,可能没有解释清楚,我的内存问题是因为我将从网络上抓取的所有数据保存在内存中。目前,该程序的结构是在我的所有爬虫线程退出后将所有数据写入文件。
标签: python csv memory memory-management