2017-02-23 88 views
1

我在代碼中有幾個工作線程執行某些工作。來自作品的數據被收集到一個擁有這些信息的小類中。這個類放入隊列中以便在主線程中處理。GC如何通過兩個線程收集類引用

GC何時收集此類?

短西頭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

Python的垃圾收集器通常會引發出來的對象,即不再被引用。

在你的情況下,這將是在while循環完成後的print()之後,並重新開始 - 用lp替換之前的數據並添加新的引用。因此舊對象不再被引用和垃圾收集。

Afaik,這適用於多線程程序,以及單線程程序。

除了python文檔,this post還有關於python中的垃圾回收器何時執行其功能的很好的總結。