来自文档:http://docs.python.org/2/library/thread
当主线程退出时,系统将定义其他线程是否存活。在使用本机线程实现的SGI上,它们仍然存在。在大多数其他系统中,是在不执行try的情况下被杀死的。最后,子句或执行对象析构函数。
在这里,在docs (http://docs.python.org/2/library/threading)中,它说:
可以将线程标记为“守护进程线程”。此标志的意义在于,当只剩下守护进程线程时,整个Python程序就会退出。初始值是从创建线程继承的。
让我们在这里只讨论非守护进程线程。由于第一个引号没有对非守护进程线程进行任何特殊引用,我假设即使是非守护进程线程也应该在主线程退出时被杀死。然而,第二句话却提出了相反的意见。事实上,当主线程退出时,非守护进程线程确实不会被杀死。那么,这里的第一句话有什么意义呢?
发布于 2013-10-06 17:50:50
您所引用的文档来自两个不同的模块:thread和threading。thread是一个低级模块,它或多或少地直接访问了平台的“线程”概念。threading提供了一个更高层次的“线程”概念,它对平台的依赖性更小。
这就是为什么医生会说不同的话。退出时的低级别thread“线程”发生了什么,这取决于平台C版本的线程所做的事情,但无论如何,Python并不试图--或者不--彻底关闭它们。
threading.Thread是不同的。Python正常关闭处理的一部分是.join()所有非守护进程threading.Thread线程。因此,在所有非守护进程threading.Thread线程都结束之前,程序是不会结束的(这是程序员的责任)。请注意,低级别的thread模块线程没有.join() - .join()的概念,这是一个更高级别的概念,它是由实现的,是一个独立的threading模块。
建议:使用threading而不是thread,除非您有很好的理由使用thread。threading性能更好,并提供了许多有用的工具。什么时候使用thread更好?我想不出一个;-)
注意:在Python3中,低级thread模块被重命名为_thread。和往常一样,前面的下划线暗示“最好不要搞砸这件事--但如果你必须的话,它就在这里”。
https://stackoverflow.com/questions/19208653
复制相似问题