簡體   English   中英

Python:如何跟蹤對象是否仍處於“使用”狀態?

[英]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放在集合中(或使用WeakKeyDictionaryWeakValueDictionaryWeakSet )來跟蹤您必須更新的各種游標。

除了@nneonneo所說的,你應該定期瀏覽你的光標弱引用列表並剔除None s否則你將會得到一個不斷增長的None列表

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM