【发布时间】:2018-03-03 09:57:23
【问题描述】:
我想在对象消失时使用weakref.finalize 清理一些后台线程,但是当对象在模块范围内时,终结器没有运行(编辑:)。
但是请注意,该对象没有对活动线程的引用,我看不出它没有被垃圾收集的理由。
显式调用del 可以解决问题,但这很不方便。
现场演示: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
【问题讨论】:
标签: python multithreading garbage-collection