我正在用C编写一个多线程Python扩展,它处理了相当多的GIL
在退出时出现了一个问题,类似这样的代码会完全关闭:
from myextension import ExtensionObject
obj = ExtensionObject()
obj.start()
time.sleep(5)
del obj
# Interpreter exits here
但是,如果我从末尾删除del obj
并让obj
超出范围并自动删除,那么在尝试获取GIL以在其中一个派生线程中执行某些清理时会出现死锁
删除一个对象和让它离开作用域有根本区别吗,特别是当它在程序执行结束时
编辑:还要注意obj = None
在这个场景中做的事情与del obj
相同
这没有根本的区别,因为执行删除操作的总是垃圾收集
del obj
实际上删除的是变量,而不是它所引用的对象李>通过让变量被其他引用,上述两种情况都可以被克服:
相关问题 更多 >
编程相关推荐