0

最近、私は C でプロジェクトを書き、Python を拡張し、Python を while ループで呼び出しました。その結果、メモリが増えて止まらなくなりました。

コードは次のとおりです。

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);
    }
}

コードがこれに似ていて、メモリ リークが発生しているように見える場合、PyFinalize はおそらく「Python インタープリターによって割り当てられたすべてのメモリを解放する」ため、Python の実装に問題があります。python サイトには、PyFinalize に関して、「Python インタープリターによって割り当てられた少量のメモリが解放されない可能性があります (リークが見つかった場合は、報告してください)」と記載されています。python バグ トラッカーでリークを検索すると、これはまだ報告されていないことがわかります。そのため、このバグをバグトラッカーに報告することをお勧めします

于 2013-03-26T13:25:57.153 に答える