Python 中的守护进程与非守护进程线程

一个线程可以被设置为是否 daemen(守护)线程,Thread 的构造函数的 daemon 参数默认是None,默认情况下创建的是非守护线程。
一个程序只有一个主线程,即 Python 程序的初始线程,主线程必须等待这些非守护线程都执行完后才能退出。而守护线程不能阻塞主线程,即主线程不用等待守护线程执行完就可以退出。守护线程主要用于不需要用户交互的后台服务或那些即使突然死掉也不造成数据破坏的线程。
可以在创建线程时设置参数“daemon=True”或创建一个线程后调用 set_daemon(True)方法,将该线程设置为守护线程。例如:

import threading 
import time 
import logging 
logging.basicConfig(level=logging.DEBUG, format='(%(threadName)-9s) %(message)s',)
def non_daemon(): 
    logging.debug('Starting')
    logging.debug('Exiting')
def daemon(): 
    logging.debug('Starting')
    time.sleep(10)
    logging.debug('Exiting')
logging.debug('Starting') 
t = threading.Thread(name='Non-daemon Thread', target=non_daemon)
d = threading.Thread(name='Daemon Thread', target=daemon,daemon=True) 
#或者 d.setDaemon(True)
d.start()
t.start()
logging.debug('Exiting')

输出如下:

(MainThread) Starting 
(Daemon Thread) Starting 
(Non-daemon Thread) Starting 
(MainThread) Exiting 
(Non-daemon Thread) Exiting 

运行该程序,当主线程和所有非守护线程退出后,守护线程并没有立即退出,而是等待 10 秒完成自己工作后才退出,即 10 秒后才输出下列信息:

(Daemon Thread) Exiting
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值