2017-02-23 87 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中的垃圾回收器何时执行其功能的很好的总结。