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