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