我想在对象不可见时使用^{
但是,注意,对象没有对活动线程的引用,我看不到不被垃圾收集的理由。
显式调用^{{cd2>}解决了问题,但这很不方便。
现场演示:https://ideone.com/kTZsbs
import weakref
import threading
def do(l):
l.acquire()
class A:
def __init__(self):
l = threading.Lock()
l.acquire()
t = threading.Thread(target=do, args=[l])
t.start()
weakref.finalize(self, A._finalize, t, l)
@staticmethod
def _finalize(t, l):
print("finalizing")
l.release()
t.join()
a = A()
# del a does trigger _finalize though
正如@quamrana所指出的,模块级对象只在卸载模块时得到垃圾回收,因此在实际中解释器退出时。在
不幸的是,活动线程也存在于refcount>;0的已加载线程模块中,这会阻止当前模块被卸载,因此对象不会被垃圾回收。。。在
因此,确保对象是gc的唯一方法是确定变量的作用域或确保线程本身超时。在
您只需要一种方法使
a
超出范围:输出:
^{pr2}$相关问题 更多 >
编程相关推荐