2016-09-19 6 views
2

私はpython35.dllをロードするアプリケーションを持っています。 Python API PyImport_AddModuleを使用してpyファイルを実行します。 PyDict_DelItemStringを使用してモジュールを削除します。 pyファイルにはグローバルな情報があります。 PyDict_DelItemStringを呼び出してモジュールを削除すると、グローバル変数は破棄されません。グローバル変数は、Py_Finalizeを呼び出すときに破棄されます。遅すぎる。それはメモリリークを引き起こします。 Py_Initializeはアプリの起動時に呼び出されるため、Py_Finalizeはアプリのシャットダウン時に呼び出されます。Python 3.5.1、モジュールを削除すると、グローバル変数は破棄されません

しかし、python33.dllでは問題ありません。PyDict_DelItemStringを呼び出してモジュールを削除すると、グローバル変数が破棄される可能性があります。

この問題を解決するにはどうすればよいですか?回避策はありますか? Python35.dllを使用し、PyDict_DelItemStringを呼び出してモジュールを削除するときに、モジュール内のグローバル変数が自動的に解放されるようにする必要があります。この問題は解決され

class Simple: 
    def __init__(self): 
     print('Simple__init__') 
    def __del__(self): 
     print('Simple__del__') 

simple = Simple() 

答えて

0

:ここ

はPythonのテストコードです。 Python 3.4以降のバージョンでPyDict_DelItemStringの後にPyGC_Collectを呼び出す必要があります。

詳細はhttp://bugs.python.org/issue28202をご覧ください。

関連する問題