c扩展Python内存泄漏,为什么?
最近我有一个C写的项目,在Python中扩展, 我在while循环中调用Python,结果是内存增长永不停止 代码如下:c扩展Python内存泄漏,为什么?,python,c,Python,C,最近我有一个C写的项目,在Python中扩展, 我在while循环中调用Python,结果是内存增长永不停止 代码如下: main { while True { if( SUCCESS != PyInit()) { return -1; } PyDone(); usleep(1000); } } int PyInit(void) { Py_Initialize();
main
{
while True {
if( SUCCESS != PyInit())
{
return -1;
}
PyDone();
usleep(1000);
}
}
int PyInit(void)
{
Py_Initialize();
if(!Py_IsInitialized())
{
printf("PyInit: Python Init fail!\n");
return FAILURE;
}
else
{
printf( "Python Init succ!\n");
return SUCCESS;
}
}
void PyDone(void)
{
Py_Finalize();
}
最后我的英语很差,希望我已经把这个问题描述清楚了
for (;;) {
PyInitialize();
if (PyIsInitialized()) {
PyFinalize();
usleep(1000);
}
}
如果您的代码与此类似,并且似乎存在内存泄漏,那么python实现就是错误的,因为PyFinalize假定“释放python解释器分配的所有内存”。python站点声明,关于PyFinalize,“python解释器分配的少量内存可能无法释放(如果发现泄漏,请报告)。”通过python bug tracker进行的搜索表明尚未报告该漏洞,因此我建议将该漏洞报告给他们。尝试使用valgrind运行。此外,CPython的垃圾收集器可以保留内存,只要它关心我最后一次使用它。@Joran Beasley我会试试你说的。@Eric Urban在这种情况下,我们怎么做CPython。~@Joran Beasley谢谢@乔兰·比斯利还没有……是的!我也在c-api中读到了这一点,但我只是不知道如何报告~