GC如何通过两个线程收集Class引用

时间:2017-02-23 14:16:49

标签: python-3.x garbage-collection python-multithreading

我的代码中有一些执行某些工作的工作线程。来自工作的数据被收集到一个包含这些信息的小类中。这个类被放入一个队列中以便在主线程中进行处理。

GC收集此课程的时间是什么时候?

短Sodu例子:

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())

1 个答案:

答案 0 :(得分:3)

Python的垃圾收集器通常会抛出对象,不再引用它们。

在您的情况下,这将在while循环中的print()完成后重新开始 - 用新引用替换lp中的先前数据。因此不再引用旧对象并收集垃圾。

Afaik,对于多线程程序以及单线程程序,它都是True。

除了python文档之外,this post还有一个关于python中的垃圾收集器何时完成其事情的精心编写的摘要。