0

最近我有一个由 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();
}

最后我的英语很差,希望我已经清楚地描述了这个问题。

4

1 回答 1

0
for (;;) {
    PyInitialize();
    if (PyIsInitialized()) {
        PyFinalize();
        usleep(1000);
    }
}

如果您的代码与此类似,并且似乎存在内存泄漏,则 python 实现有问题,因为 PyFinalize 据称“释放了 Python 解释器分配的所有内存”。python 网站指出,关于 PyFinalize,“Python 解释器分配的少量内存可能不会被释放(如果发现泄漏,请报告)。” 通过 python 错误跟踪器搜索泄漏表明尚未报告此问题,因此我建议将此错误报告给他们的bugtracker

于 2013-03-26T13:25:57.153 回答