来自文档:http://docs.python.org/2/library/thread
当主线程退出时,系统定义是否为另一个 线程存活。在SGI IRIX上使用本机线程实现, 他们活了下来在大多数其他系统上,它们在没有执行的情况下被杀死 尝试... finally子句或执行对象析构函数。
在这里,在文档(http://docs.python.org/2/library/threading)中,它说:
线程可以标记为“守护程序线程”。这个的意义 flag是只有守护进程线程时整个Python程序退出 离开了。初始值继承自创建线程。
我们在这里只讨论非守护进程线程。因为,第一个引用没有对非守护进程线程做任何特殊引用,我认为如果主线程退出,甚至应该杀死非守护进程线程。但是,第二个引用另有说法。实际上,当主线程退出时,非守护进程线程确实没有被杀死。那么,这里首先引用的是什么?
答案 0 :(得分:10)
您引用的文档来自两个不同的模块:thread
和threading
。 thread
是一个低级模块,可以或多或少地直接访问平台对“线程”含义的看法。 threading
提供了更高级别的“线程”概念,减少了平台依赖性。
这就是为什么文档说不同的东西。退出时低级thread
“线程”发生的事情取决于平台C的线程版本的作用,但无论如何Python都不会尝试 - 或者不 - 干净地关闭它们。
threading.Thread
是不同的。 Python正常关机处理的一部分是.join()
所有非守护进程threading.Thread
线程。因此,在所有非守护进程threading.Thread
线程结束之前,程序将不会结束(这是程序员有责任确保的)。请注意,低级thread
模块线程没有.join()
的概念 - .join()
是一个更高级别的概念通过来区分threading
模块。
建议:使用threading
代替thread
,除非您有充分理由使用thread
代替threading
。 thread
表现得更好,并提供了许多有用的工具。使用thread
时的示例更好?我想不出一个; - )
注意:在Python 3中,低级_thread
模块重命名为{{1}}。像往常一样,领先的下划线暗示“最好不要弄乱这个 - 但如果你必须的话就在这里”。