объект не умрет (ссылки на него все еще не найдены) - PullRequest
0 голосов
/ 15 апреля 2010

Я использую Parallels-Python и запускаю новый сервер заданий в функции. после завершения функции он все еще существует, хотя я не возвращал его из функции (я использовал слабый реф, чтобы проверить это). Я предполагаю, что где-то еще есть ссылки на этот объект. Две мои теории: он запускает потоки и регистрирует их в корневом логгере.

Мои вопросы: могу ли я как-нибудь выяснить, в каком пространстве имен еще есть ссылка на этот объект. У меня есть слабая ссылка. Кто-нибудь знает как отключить регистратор? Какие другие предложения отладки есть у людей?

вот мой тестовый код:

def pptester():

    js=pp.Server(ppservers=nodes)
    js.set_ncpus(0)
    fh=file('tmp.tmp.tmp','w')  
    tmp=[]
    for i in range(200):
        tmp.append(js.submit(ppworktest,(),(),('os','subprocess')))
    js.print_stats()
    return weakref.ref(js)

спасибо заранее Wolfgang

1 Ответ

1 голос
/ 15 апреля 2010

Вы можете использовать gc.get_referrers(obj), чтобы узнать, что ссылается на объект. Поскольку в ответ вы, скорее всего, получите кучу слов, вам придется подняться на пару уровней, чтобы разобраться в этом.

...