1 Востаннє редагувалося Q-bart (10.07.2020 18:10:05)

Тема: Are python class variables gcollected

Ось в класі оголошую атрибут з об'єктом іншого класу (одразу і ініціалізую):

class A(object):
    var = B()

потім в процесі програми створюю інстанси A - N разів. Кожен інстанс А буде мати посилання на один і той самий об'єкт B, все логічно.

Цi посилання будуть видалятись(коли?) i відповідно gc зможе видалити всі ці N інстансів A? Чи в пам'яті інстанси A будуть лежати тому що всі вони все ще посилаються на один і той самий об'єкт?

Проблема в тому що, програма зжирає memory і дуже швидко. Критично: вже все перепробував (вочевидь не все), розкладав усе на найменші частинки - ніяк не можу знайти. Витратив на це купу часу і десь розуміння ще не повне, як працює class instantiation

python 3.5-7

Прихований текст

Не кричіть про дизайн) Знаю, що A мав би в __init__ приймати b

2

Re: Are python class variables gcollected

Жоден екземпляр A не матиме посилання на цей B. Його має об'єкт класу, а не екземпляр. Можете перевірити - A.var існує, навіть якщо немає жодного екземпляру A.
І посилання працюють лише в один бік: A.var знає, що на нього посилаються, але не знає, хто, і не тримає ці об'єкти. Шукайте протікання деінде.

Подякували: leofun01, Q-bart2

3

Re: Are python class variables gcollected

Дякую!

Прихований текст

Можливо, підкажете щось неочевидне, що може бути причиною? mem profiler, objgraph, класичні статті по mem leak - опрацював. Ще в контексті: asyncio+client aiohttp (але скоріш за все проблема не в async - не зміг відтворити)

Можливо щось з досвіду, на що звернути увагу?

4

Re: Are python class variables gcollected

Вибачте, на питання по коду без коду відповідають лише телепати.
Спробуйте мінімізувати проблемний код.

5

Re: Are python class variables gcollected

koala написав:

Спробуйте мінімізувати проблемний код.

в цьому, кагбе, і основна проблема)

6

Re: Are python class variables gcollected

Ось є стаття: https://markhaa.se/debugging-python-memory-leaks.html
Може, допоможе.
Або показуйте код.

7

Re: Are python class variables gcollected

koala написав:

Ось є стаття: https://markhaa.se/debugging-python-memory-leaks.html
Може, допоможе.
Або показуйте код.

Дякую. Проходив цю статтю)