2017-02-23 6 views
1

코드에서 일부 작업을 수행하는 작업자 스레드가 있습니다. 저작물의 데이터는이 정보를 보유하는 소규모 클래스로 수집됩니다. 이 클래스는 메인 스레드에서 처리하기 위해 큐에 넣어집니다.GC가 두 개의 스레드로 클래스 참조를 수집하는 방법

GC가이 클래스를 언제 수집합니까?

짧은 Sodu의 excample :

def run(in_q, out_q): 
    lp = lpClass() 

    # Do work and add info in class 
    workToDo = in_q.get_nowait() 

    while working: 
    lp.add(work data) 

    out_q.put_nowait(lp) 


# main 

t = thread(run, in_q, out_q) 
t.start() 
in_q.put_nowait(some work) 
t.join() 

while out_q.not_empty: 
    lp = out_q.get() 

    print(lp.getData()) 

답변

3

파이썬의 가비지 컬렉터는 일반적으로 밖으로 개체 발생, 더 이상 참조됩니다.

귀하의 경우, 이것은 while 루프가 완료된 후 print()이되고 lp의 이전 데이터를 새로운 참조로 대체하는 작업을 시작합니다. 따라서 이전 객체는 더 이상 참조되지 않고 가비지 수집됩니다.

Afaik, 이것은 단일 스레드 프로그램뿐만 아니라 다중 스레드 프로그램에서도 True를 유지합니다.

파이썬 설명서 이외에도 this post에는 파이썬의 가비지 수집기가 그 일을 할 때 잘 정리 된 요약이 있습니다.