【发布时间】:2021-09-25 20:44:31
【问题描述】:
我想知道如何在 python 中回收“threading.Thread”对象?
首先,我创建 (x) 个线程(“workers”)并存储在一个列表中。 我像往常一样开始他们,一旦他们完成就加入他们。 然后我从共享对象收集的数据中归档数据。 最后,我清除列表中的所有线程(“workers”),并在条件循环中重复此循环。
我似乎遇到的问题是线程对象即使在删除它们之后仍然存在。假设我使用 10 个线程,下次循环时我最终使用线程 11-20。
有没有办法在加入后终止第一个线程循环并有效地回收相同的线程?
亲切的问候,
安德鲁
【问题讨论】:
-
线程ID不是密集序列:是什么导致“使用线程11-20”和“[线程对象]仍然存在”的断言? (一个线程结束——并且
is_alive被重置为 False——当它的run方法终止时。没有超时,join保证等待这个条件并且线程“不再活动”并且实际Python 线程 wrapper 对象遵循正常的生命周期(和 GC)规则。)