Đôi khi tôi muốn một lớp được cập nhật liên tục bởi một chuỗi công nhân mà nó sinh ra khi nó được tạo ra. Về cơ bản như thế này:Trong python, có cách nào tạo ra các chuỗi chết khi không còn tham chiếu đến chúng nữa không?
class MyWidget:
def __init__(self):
self.blah = None
self.thread = MyThread(self)
self.thread.start()
def update(self, blah):
self.blah = blah
class MyThread(threading.Thread):
def __init__(self, widget):
self.widget = widget
def run(self):
while True:
time.sleep(1)
blah = poll()
self.widget.update(blah)
Tôi muốn có một cách an toàn để thiết kế này vì vậy mà tôi chắc chắn rằng thread chết khi MyWidget
không còn cần thiết. Vấn đề với mã ở trên là MyWidget
sẽ không bao giờ chết vì nó đang được giữ nguyên bởi số MyThread
. Tôi có thể khắc phục điều đó bằng cách cung cấp MyThread
một weakref.ref
cho số MyWidget
và ngắt vòng lặp khi tham chiếu bị chết nhưng tôi đã phạm sai lầm khi không thực hiện điều này trong quá khứ.
Điều tôi thực sự thích là các chủ đề thu gom rác cùng với mọi thứ khác. I E. Một chuỗi bị giết khi nó là đồ thị tham chiếu và đồ thị tham chiếu của sợi chính bị phân tách. Liệu có thể viết một con thú như vậy không? Họ đã tồn tại chưa?