变量未得到垃圾回收导致C ++进程内存增加

时间:2018-10-16 02:03:16

标签: python c++ python-c-api

我有这样的Python脚本:

import module
globalvariable a
def read(key):
    x = funcA(a, key)
    ret = funcB(x)
    if ret == True:
        return "Success"
    else:
        return "Failure"

我不时通过Python-C-API从C ++程序中反复调用此函数。我注意到,每次调用此函数时,我的C ++进程内存都在不断增加。

经过大量调查后:

  1. 运行Valgrind
  2. 检查我的C ++代码中所有变量/ PyObjects的所有Py_DECREF
  3. 确保我的代码不会在其他地方泄漏内存
  4. 用boost python替换我的原始Python-C-API并再次检查

我发现C ++内存在增加,原因是Python脚本本身而不是Python-C-API。我通过将上述脚本替换为虚拟脚本(没有变量并且不执行任何操作)并重复调用同一函数来确认这一点。进程内存是恒定的,并且这次没有增加。

如何在每次函数调用后强制Python垃圾收集器释放所有变量?我不知道Python GC是否/何时释放内存。我在其他stackoverflow答案中注意到一些建议,强迫垃圾收集器进行收集是一件坏事。

如何确保每次调用python脚本时c ++进程都不会占用额外的内存?就像在我声明的所有本地python变量上调用del()一样简单吗?还是有其他方法?

我还从导入的模块中调用了很多函数,我不知道这是否也会影响垃圾回收。

0 个答案:

没有答案