python - 变量没有被垃圾收集导致 C++ 进程内存增加
问题描述
我有一个这样的 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++ 进程内存都会不断增加。
经过大量调查:
- 运行 Valgrind
- 检查我的 C++ 代码中所有变量/PyObjects 的所有 Py_DECREF
- 确保我的代码不会在其他地方泄漏内存
- 用 boost python 替换我的原始 Python-C-API 并再次检查
我发现由于 Python 脚本本身而不是 Python-C-API,C++ 内存正在增加。我通过用一个虚拟脚本(没有变量并且不做任何事情)替换上面的脚本并重复调用相同的函数来确认这一点。进程内存是恒定的,这次没有增加。
如何强制 Python 垃圾收集器在每次函数调用后释放所有变量?我不知道 Python GC 是否/何时会释放内存。我注意到其他 stackoverflow 答案中的一些建议,即强制垃圾收集器收集是一件坏事。
如何确保每次调用 python 脚本时我的 c++ 进程都不会占用额外的内存?是否像在我声明的所有本地 python 变量上调用 del() 一样简单?还是有其他方法?
我还从导入的模块中调用了很多函数,我不知道这是否也会影响垃圾收集。