В Python может ли dict с currentThread() в качестве ключа вызывать утечки памяти?

#python #django #multithreading #memory-leaks

#python #django #многопоточность #утечки памяти

Вопрос:

Я отлаживаю утечки памяти в приложении Django, и может ли что-то любопытное в django_cachepurge :

 from threading import currentThread

_urls_to_purge = {}

def add_purge_url(url):
    # ....

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

Подвержена ли такая конструкция утечкам памяти?
Я подозреваю, что да, если я не знаком с некоторой магией Python здесь.
Нет места, где dict очищается.

Комментарии:

1. Почему вы не используете threading.local().urls_to_purge ?

Ответ №1:

Я не знаю, что currentThread возвращает, но вы, вероятно, можете использовать встроенные id hash функции or для получения безопасного значения.

Если поиска недостаточно, например, потому что вы хотите выполнить итерацию по контейнеру, есть weakref.WeakKeyDictionary .

Комментарии:

1. Я добавил импорт currentThread() , поэтому вы принимаете это во внимание

2. В этом случае ваш ответ — да. Ссылка предотвращает сбор нескольких байтов экземпляра потока. Я сомневаюсь, что что-то серьезное остается зависшим, поскольку потоки CPython все равно не сопоставляются с машинными потоками.