c扩展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();

最近我有一个C写的项目,在Python中扩展, 我在while循环中调用Python,结果是内存增长永不停止

代码如下:

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中读到了这一点,但我只是不知道如何报告~