今天晚上在試圖追蹤Python程序中的資源泄漏時,我發現現代ORM使得這項工作非常困難。事實上,一個獨立坐在記憶中並沒有孩子的對象會在您開始檢查其屬性時突然顯示出有十幾個關聯對象,因爲當然,每個屬性取消引用都會調用一個描述符來引入附加信息,飛。在不改變它們的情況下檢查Python對象的工具
我甚至注意到,做一個特定的對象的簡單print
清盤做一個數據庫查詢和拉動更多的鏈接對象到內存 - 毀了,我一直計算小心引用計數 - 因爲它__repr__()
內置在顯示的名稱出一些相關的對象。
有,碰巧的是,一些技術,讓物品進行檢查沒有影響他們 - 操作,如type(obj)
和id(obj)
和obj.__dict__
。 (但不是打印的__dict__
,因爲這在字典中的每一個值調用__repr__()
!)有沒有人結合這幾個「安全」的檢查方法支持,在像Python調試,檢查方便,探索提示的Python對象圖,以便我可以看到這些文件在哪裏被保持打開,使我從文件描述符中運行?
我基本上需要一個反海森堡工具,它可以防止我的檢查行爲產生任何副作用!
的「檢查」模塊:
一個答案建議我試試inspect()
模塊,但它看起來像它解引用您提供的對象上的每個屬性:
import inspect
class Thing(object):
@property
def one(self):
print 'one() got called!'
return 1
t = Thing()
inspect.getmembers(t)
此輸出:
one() got called!
[('__class__', <class '__main__.Thing'>),
('__delattr__', <method-wrapper '__delattr__'…),
…
('one', 1)]
也許你可能會展示一個你真正喜歡看到什麼輸出的例子? – dkamins 2011-05-12 05:32:54
你能找到一個可以接受的解決方案嗎? – elyase 2013-10-27 17:08:02