我正在编写一个非常简单的脚本来读取一个相当大的文件(3M 行,1.1G 文件),其中包含多项式的乱码 (str) 表达式。然后我使用 Sympy 进行一些符号计算并将结果写入 16 个单独的文件。
我的脚本在运行时占用越来越多的内存空间 (> 20 Gb),我不明白为什么。您认为有什么方法可以提高该脚本的内存使用率吗?
from sympy import sympify
from sympy.abc import x,y
from sympy import degree
fin = open("out_poly","r")
A = fin.readlines()
fin.close()
deg = 4
fou = [open("coeff_x"+str(i)+"y"+str(k),"w") for i in range(deg+1) for k in range(deg+1-i)]
for line in A:
expr = line.replace("^","**").replace("x0","x").replace("x1","y")
exprsy = sympify(expr)
cpt = 0
for i in range(deg+1):
for k in range(deg+1-i):
fou[cpt].write(str(exprsy.coeff(x,i).coeff(y,k))+"\n")
cpt = cpt+1
for files in fou:
files.close()
最佳答案
找到了!罪魁祸首是……Sympy!
Sympy 缓存表达式并填充内存。该问题也可以通过设置环境变量 SYMPY_NO_CACHE=no 来解决,但它会严重影响 Sympy 性能。更好的选择是导入以下 Sympy 扩展:
from sympy.core.cache import *
并以适当的时间间隔清除代码中的缓存:
clear_cache()
在我的代码中的每次迭代中使用这些命令,内存使用量稳定且恒定,仅为 26 Mo。
有关问题的链接:http://code.google.com/p/sympy/issues/detail?id=3222
有关 Sympy 缓存的链接:https://github.com/sympy/sympy/wiki/faq
感谢大家的帮助。
关于python - 使用大量内存的简单 Python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19786838/