我有1.6GB可用于python进程。我在写一个很大的csv文件,数据来自数据库。问题是:文件写入后,内存(>1.5GB)不会立即释放,这会导致下一位代码出错(分配内存失败,因为操作系统找不到足够的内存来分配)。在
有什么功能可以帮助我释放记忆? 或者,你有更好的方法吗?在
这是我用来写文件的脚本,是分块写入来处理内存问题的:
size_to_read = 20000
sqlData = rs_cursor.fetchmany(size_to_read)
c = csv.writer(open(fname_location, "wb"))
c.writerow(headers)
print("- Generating file %s ..." % out_fname)
while sqlData:
for row in sqlData:
c.writerow(row)
sqlData = rs_cursor.fetchmany(size_to_read)
我想问题是你从来没有关闭过这个文件。试试看。在
使用
with
可以自动关闭文件并释放内存。避免显式调用c.close()
我也相信你可以避免这样的循环。。。在
^{pr2}$很难复制,因为我没有数据:(
编辑
我知道这并不是一个真正的答案,但是请查看包
memory_profiler
进行逐行评估,看看你在哪里使用了大量的mem。https://pypi.python.org/pypi/memory_profiler编辑2
下面是一个使用生成器保持低内存使用率的示例。在
通过http://code.activestate.com/recipes/137270-use-generators-for-fetching-large-db-record-sets/
如果有任何效果,请告诉我们!在
相关问题 更多 >
编程相关推荐