python35.dll をロードするアプリがあります。Python API PyImport_AddModule を使用して、py ファイルを実行します。そして PyDict_DelItemString を使用してモジュールを削除します。py ファイルにはグローバル変数があります。モジュールを削除するために PyDict_DelItemString を呼び出しても、グローバル変数は破棄されません。Py_Finalize を呼び出すと、グローバル変数が破棄されます。手遅れです。それがメモリリークの原因です。Py_Initialize はアプリの起動時に呼び出されるため、Py_Finalize はアプリのシャットダウン時に呼び出されます。
ただし、python33.dll では問題ありません。PyDict_DelItemString を呼び出してモジュールを削除すると、グローバル変数が破棄される可能性があります。
問題を解決するには?回避策はありますか? 私は python35.dll を使用する必要があり、PyDict_DelItemString を呼び出してモジュールを削除するときに、モジュール内のグローバル変数が自動的に解放されることを望みます。
Python テスト コードは次のとおりです。
class Simple:
def __init__( self ):
print('Simple__init__')
def __del__( self ):
print('Simple__del__')
simple = Simple()