我在阅读关于Python中清理对象的不同方法的文章,并且偶然发现了这些问题(1, 2),它们基本上都表示使用__del__()
进行清理是不可靠的,应该避免使用以下代码:
def __init__(self):
rc.open()
def __del__(self):
rc.close()
问题在于,我正在使用完全相同的代码,但我无法重现上面提到的任何问题。就我所知,我不能选择with
语句的替代方案,因为我为封闭源软件(testIDEA,有人用过吗?)提供Python模块。这个软件将创建特定类的实例并且处置它们,这些实例必须准备好在之间提供服务。我看到的唯一替代__del__()
的方法是根据需要手动调用open()
和close()
,我认为这将很容易出现错误。
我知道当我关闭解释器时,没有保证我的对象会被正确地销毁(这并不困扰我,甚至Python的作者也认为这样做没问题)。除此之外,我使用__del__()
进行清理是否存在风险?
__exit__
将在那种情况下执行。我很想说不会,但我意识到我实际上不知道答案。抱歉-这只是一个旁观者的评论。 - RickDLL_THREAD_DETACH
调用时会在DllMain()
中死锁。由于我们时间有限且无法调试该闭源DLL,我们最终决定可以通过任务管理器结束GUI来解决问题。 - Dmitry Grigoryev