为什么在中断Python中的控制线程后,具有阻塞操作的非守护程序线程仍在运行

时间:2014-04-09 09:43:10

标签: python multithreading blocking

我无法弄清楚为什么非守护程序线程(daemon thread description)在控制线程中断后仍然运行的根本原因。也许这不是特定的python ......

我期待这样的行为:当我中断控制线程时,生成我的程序的每个其他线程也应该关闭。
但是如果一个线程执行阻塞操作(例如I / O操作),那么该线程在控制线程中断后仍然运行。

Python文档说:

  

如果您希望线程正常停止,请使它们成为非守护进程并使用合适的信令机制,例如事件。

没关系 - 我们可以通过事件,信号等与线程进行通信,使用select()进行非阻塞此类操作,并对循环中的事件条件做出反应。

但我想知道为什么事情会这样发生。

更新 我认为这是常见的问题,代码片段在这里并不是必需的,但这里是:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import threading
import time

def func_with_blocking_operation():
    time.sleep(5)

threading.Thread(target=func_with_blocking_operation).start()

此处通过按下控制终端中的Ctrl+C来中断控制线程(SIGINT信号被发送到控制线程),程序仍在运行,而休眠功能未退出。也许是因为Python中默认join()的非守护程序线程?

由于

0 个答案:

没有答案