当前位置: 首页 > 知识库问答 >
问题:

当主线程调用sys.exit()时,其他线程会发生什么?

韦思淼
2023-03-14

来自文档:http://docs.python.org/2/library/thread

让我们在这里只讨论非守护进程线程。因为第一个引号没有特别提到非守护进程线程,所以我假设,如果主线程退出,即使是非守护进程线程也应该被杀死。然而,第二句引文却表明了另一种情况。事实上,当主线程退出时,非守护进程线程确实不会被杀死。那么,这里的第一个引用有什么意义呢?

共有1个答案

翁宏茂
2023-03-14

您引用的文档来自两个不同的模块:ThreadThreadingThread是一个低级模块,它或多或少地提供了对平台关于“Thread”含义的概念的直接访问。线程化提供了更高层次的“线程”概念,平台依赖性较小。

这就是为什么医生说的不同。低级线程“线程”在退出时会发生什么,这取决于platform C版本的线程会做什么,但在任何情况下,Python都没有尝试--或者不尝试--彻底关闭它们。

Threading.Thread则不同。Python正常关机处理的一部分是.join()所有非守护进程threading.thread线程。因此,在所有非守护进程threading.thread线程结束之前,程序根本不会结束(这是程序员的责任)。请注意,低级线程模块线程没有.join()-.join()是由distincent线程模块实现的高级概念。

建议:使用线程而不是线程,除非您有充分的理由使用线程线程化行为更好,提供了许多有用的工具。一个使用thread时更好的示例?我想不出一个;-)

注意:在Python 3中,低级Thread模块被重命名为_thread。像往常一样,前导下划线暗示“最好不要搞砸这个--但如果你必须的话,它就在这里”。

 类似资料:
  • 下面是代码,我面临的问题是recordRead变量告诉线程应该从哪里开始读取记录的起点。但是我如何为每个线程设置不同的值?例如,对于thread1,它应该是0,recordsToRead应该是300,对于thread2,recordsToRead应该是300+300=600,对于最后一个线程,它应该是600以及更高的结束。pagesize=50pagesize、recordRead和recordT

  • 问题内容: 我知道从线程调用是一个坏主意。但是,如果线程使用创建新进程,将会发生什么? 新进程将是创建线程的主线程的子进程。我认为。 如果其父级先完成,则新进程将附加到init进程中。它的父级是主线程,而不是创建它的线程。 如果我错了,请纠正我。 问题答案: 新进程将是创建线程的主线程的子进程。我认为。 创建一个新的过程。一个进程的父进程是另一个进程,而不是线程。因此,新流程的父级是旧流程。 请注

  • 你好,我是多线程编程的新手。我正在尝试创建一个代码来创建一个线程THREAD1,在它完成某些事情后,它会触发另外两个线程,例如THREAD2和THREAD3,然后退出。 我写了两个可能的解决方案。 1) 使用条件变量(不起作用:在某些情况下会出现死锁): 2) THREAD1直接创建另外两个线程。 我想知道你的意见。非常感谢你

  • 问题内容: 在某个线程上调用an 时,该线程会发生什么? 问题答案: 目标线程是“中断的”。通常,在该线程中设置一个标志,该线程可以查看该标志(带有)。如果目标线程当前在某些I / O上被阻塞,则分别使用an 或an 唤醒它。 线程中断是微调线程的一种温和方法。它是用来给线程有机会退出 干净 ,而不是,这更像是一支突击步枪射击的线程。

  • 我注意到,在这个javadoc中,https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.UncaughtExceptionHandler.htmlUncaughtExceptionHandler用于发生异常但未被捕获的情况。但是,那个线程会悄悄地失败吗?我想是的,因为它是异步进行业务的,但我正在调查我们的一个进程的相关问题,我很惊讶现

  • 问题内容: 这可能是一个愚蠢的问题,但是我正在测试我对Python的一些假设,并对为什么以下代码段在线程中调用时不退出而在主线程中调用时退出而感到困惑。 sys.exit()的文档指出,该调用应从Python退出。从该程序的输出中可以看到,“ post thread exit”从不打印,但是即使在线程调用退出之后,主线程仍继续运行。 是否为每个线程创建了一个单独的解释器实例,并且对exit()的调