我有一个加载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()发布于 2016-09-22 09:28:20
这个问题已经解决了。需要在Python3.4版本的PyDict_DelItemString之后调用PyGC_Collect。
有关详细信息,请阅读http://bugs.python.org/issue28202。
https://stackoverflow.com/questions/39564909
复制相似问题