Я обнаружил, что gc
не удаляет объекты, созданные из Threading.thread()
.
# print memory status every 5sec
def trace_memory():
while True:
time.sleep(5)
print(mem_top())
# just print and end
def test_thread():
print('thread')
threading.Thread(target=trace_memory).start()
curr_count = 0
max_count = 10000
while max_count > curr_count:
threading.Thread(target=test_thread).start()
curr_count += 1
и ниже является результатом mem_top()
:
refs:
10001 <class 'list'> [<unlocked _thread.lock object at 0x00000204DD680030>, <unlocked _thread.lock object at 0x00000204DD
bytes:
90120 [<unlocked _thread.lock object at 0x00000204DD680030>, <unlocked _thread.lock object at 0x00000204DD
Я создал 10000 (test_thread()
) + 1 (trace_memory()
) поток и все test_thread()
были завершены.
Но refs :, bytes: показывают, что на потоки все еще что-то ссылается.
Как можно сделать gc
, чтобы их удалить?