【发布时间】:2016-12-13 03:31:15
【问题描述】:
基本上,我有一些线程可能会阻塞 I/O,但在某些情况下必须停止。整个软件架构已经这样设计,因此切换到多处理可能会很痛苦。因此,我在网上搜索,发现使用thread_ref._Thread__stop()似乎是唯一可以保证停止阻塞线程的方法。
现在的问题是,尽管该线程已停止,但它并未从 threading.enumerate() 中删除。如果我在其引用上调用isAlive(),它会返回False。我试过如果一个线程的run()方法正常返回,该线程应该从该列表中删除。
这很糟糕,因为如果线程仍然有对该 Thread 对象的引用,理论上它的资源将不会被收集,并且最终可能导致内存泄漏。
在线程上执行_Thread__stop 后,我应该怎么做才能确保事情得到清理?
【问题讨论】:
-
Python 中不支持停止线程的方法。特别是,
_stop()方法没有做任何此类事情,并且被设为私有正是因为它是在Thread的内部簿记之外无法想象使用的实现细节(它确实不会阻止thread - 当线程自行退出时,Threadinternals 使用它)。更多信息:stackoverflow.com/questions/18018033/…
标签: python multithreading python-multithreading