进程and主线程and子线程and守护线程的关系

当下面的多线程python程序运行时,主线程运行10秒后结束,t 线程会运行20秒,进程会等待t 线程结束后才会结束。

from threading import Thread
import time

def foo(x):
	for i in range(1, x+1):
		print(i)
		time.sleep(1)
	f = open('text.txt', 'w')
	f.close()

t = Thread(target=foo, args=(20,))
# t.daemon = True
t.start()

time.sleep(10)

当在主线程还没有结束的10秒内按CTRL+C,会发现主线程被终结,但t 线程依然存活,继续打印输出。 

一般情况,进程会等待所有线程结束后结束,主线程结束,子线程会继续运行。

如果把# t.daemon = True的注释去掉让代码生效,t 线程就会被设置为守护进程。程序运行结果是,主线程10秒后结束,t 线程也会随主线程结束而结束,后面的文本文件不会被创建,如果在主线程还没有结束的10秒内按CTRL+C,会把主线程和守护线程一起终结掉。

当有守护线程的时候,进程结束不需要等待守护线程执行完成,其他线程(主线程和子线程)结束后,进程随之结束,守护线程也跟着结束。

猜你喜欢

转载自blog.csdn.net/lipei_csdn/article/details/81413726