[英]Python: How do I keep track of whether an object is still in 'use'?
我有一個文本編輯程序,將游標分發給需要它的程序的其他部分。 游標由兩部分列表[start, end]
,每次插入/刪除文本時都需要更新(開始/結束索引向前或向后移動)。
當光標不再使用時,我想停止更新它,因為它有很多,而且更新時間很長。 不使用,我的意思是請求它的對象不再引用它 - 它不再關心它。 (例如:它有一個關於'bob'一詞的所有搜索結果的游標列表,並且對'fred'這個詞進行了新的搜索,所以現在用一個新的游標列表替換它的結果列表。 。舊列表及其游標不再使用。)
我可以要求使用游標的任何對象在不再需要時調用.finished()
方法。 但是,如果我能夠檢測到編輯器之外的任何內容不再被引用,那將會更容易。 我如何在python中檢查這個(我知道垃圾清理維護一個列表,並在不再引用時刪除它)?
使用weakref
模塊中的弱引用來保存光標引用。
當弱引用的引用不再具有對它的任何強(正常)引用時,weakref將解析為None
。
>>> import weakref
>>> class Cursor: pass
...
>>> _ = None # suppress special _ variable
>>> a = Cursor()
>>> r = weakref.ref(a)
>>> print r()
<__main__.Cursor instance at 0x1004a2bd8>
>>> del a
>>> print r()
None
您可以將所有這些weakref放在集合中(或使用WeakKeyDictionary
, WeakValueDictionary
或WeakSet
)來跟蹤您必須更新的各種游標。
除了@nneonneo所說的,你應該定期瀏覽你的光標弱引用列表並剔除None
s否則你將會得到一個不斷增長的None
列表
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.