【发布时间】:2013-10-13 01:42:18
【问题描述】:
来自文档:http://docs.python.org/2/library/thread
主线程退出时,系统定义其他线程是否退出 线程存活。在使用本机线程实现的 SGI IRIX 上, 他们活下来。在大多数其他系统上,它们在没有执行的情况下被杀死 try ... finally 子句或执行对象析构函数。
在这里,在文档 (http://docs.python.org/2/library/threading) 中它说:
可以将线程标记为“守护线程”。这件事的意义 flag 是当只有守护线程时整个 Python 程序退出 留下了。初始值继承自创建线程。
我们在这里只讨论非守护线程。由于第一个引号没有对非守护线程进行任何特殊引用,因此我假设如果主线程正在退出,即使是非守护线程也应该被杀死。但是,第二个引用表明并非如此。而事实上,当主线程退出时,非守护线程确实没有被杀死。那么,这里的第一句话有什么意义呢?
【问题讨论】:
-
写代码试试看
-
似乎
thread模块将所有内容都作为守护线程处理,而threading增加了“非守护”线程的概念。 -
@user2799617:我确实编写了代码并得出结论“当主线程退出时,非守护线程确实没有被杀死”。这就是为什么,我想知道第一个报价何时适用,因为我的系统可能是那些“大多数其他系统”之一:Ubuntu 12.10 running python 2.7
-
@JoachimIsaksson:谢谢,这确实有道理。我怀疑,但只需要确认
-
@gjain 如果您阅读线程页面的最后一部分,有一些有趣的信息相当于守护程序线程与线程模块创建的线程; “这可以通过仅从通过线程模块创建的非守护线程执行导入来最容易地实现。直接使用线程模块创建的守护线程和线程将需要一些其他形式的同步来确保他们不会在系统关闭开始后尝试导入。”
标签: python multithreading python-2.7 daemon exit