python - 使用大量内存的简单 Python 脚本

标签 python memory optimization sympy

我正在编写一个非常简单的脚本来读取一个相当大的文件(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/

相关文章:

PHP 内存管理

c++ - 优化循环与代码复制

performance - 在 Dart 中使用定长列表有性能优势吗?

r - 优化 R 中的 Apply() While()

python - Azure 数据湖引发错误 - 确保授权 header 的值格式正确,包括签名

python - Marshmallow:如何覆盖此 Python 类的构造函数?

python - 如何将 OpenCV 图像与颜色进行比较

java - 以编程方式检查可用的 heapSize?

c++ - 为什么在抛出 'std::bad_alloc' 实例后调用终止?

python - 如何删除 Pandas 组中的重复项