2011-10-26 12 views
2

我調試內存泄漏的Django應用程序,並能好奇的東西在django_cachepurge在Python中,能否使用currentThread()作爲關鍵字導致內存泄漏?

from threading import currentThread 

_urls_to_purge = {} 

def add_purge_url(url): 
    # .... 

    _urls_to_purge.setdefault(currentThread(), set()).add(url) 

是這樣的結構容易出現內存泄漏? 我懷疑是這樣,除非我不熟悉這裏的一些Python魔法。 字典沒有清理的地方。

+1

爲什麼不使用'threading.local()。urls_to_purge'? – Tobias

+0

你是否分析了你的代碼? – Daenyth

+0

@Tobias:好的建議! – vdboor

回答

1

我不知道currentThread會返回什麼,但是您可能可以使用內置的idhash函數來獲取安全值。

如果查找不夠,例如因爲你想迭代容器,有weakref.WeakKeyDictionary

+0

我已經添加了'currentThread()'的導入,所以你考慮一下 – vdboor

+0

+1來提及'WeakKeyDictionary',好主意! – vdboor

+0

在這種情況下,您的答案是肯定的。該引用可以防止收集Thread實例的幾個字節。我懷疑任何嚴重的問題都懸而未決,因爲cPython線程無論如何都不映射到機器線程。 – Tobias