Python多线程之阻塞join()和线程守护setDeamon()

Python多线程之阻塞join和线程守护setDeamon

多线程默认情况

无阻塞无线程守护。

import threading
import time

def run(process = 'python'):
	time.sleep(2)
	print('当前线程的名字是: ', process)
	
if __name__ == '__main__':
	thread_list = ['know','like','love','marry']
	start_time = time.time()
	print("这是主线程",threading.current_thread().name)
	for i in thread_list:
		t = threading.Thread(target = run,args = ((i,)))
		t.start()
	print("主线程结束!",threading.current_thread().name)
	end_time = time.time()
	print("一共用时:",end_time-start_time)

运行结果:

这是主线程 MainThread
主线程结束! MainThread
一共用时: 0.00327301025390625
当前线程的名字是:  like
当前线程的名字是:  know
当前线程的名字是:  love
当前线程的名字是:  marry

从结果可以看出主线程结束后,子线程还在执行,最后结束。

设置线程守护setDaemon的作用

import threading
import time

def run(process = 'python'):
	time.sleep(2)
	print('当前线程的名字是: ', process)
	
if __name__ == '__main__':
	thread_list = ['know','like','love','marry']
	start_time = time.time()
	print("这是主线程",threading.current_thread().name)
	for i in thread_list:
		t = threading.Thread(target = run,args = ((i,)))
		t.setDaemon(True)
		t.start()
	print("主线程结束!",threading.current_thread().name)
	end_time = time.time()
	print("一共用时:",end_time-start_time)

运行结果:

这是主线程 MainThread
主线程结束! MainThread
一共用时: 0.002863645553588867

设置线程守护为True时,当主线程结束时,如果子线程没有执行完,将会被kill掉;设置线程守护为False时,线程守护没有作用。

线程阻塞join作用

import threading
import time

def run(process = 'python'):
	time.sleep(2)
	print('当前线程的名字是: ', process)
	
if __name__ == '__main__':
	thread_list = ['know','like','love','marry']
	start_time = time.time()
	print("这是主线程",threading.current_thread().name)
	for i in thread_list:
		t = threading.Thread(target = run,args = ((i,)))
		t.setDaemon(True)
		t.start()
		t.join()
	print("主线程结束!",threading.current_thread().name)
	end_time = time.time()
	print("一共用时:",end_time-start_time)

运行结果:

这是主线程 MainThread
当前线程的名字是:  know
当前线程的名字是:  like
当前线程的名字是:  love
当前线程的名字是:  marry
主线程结束! MainThread
一共用时: 8.01774787902832

主线程一直等待全部的子线程结束之后,主线程自身才结束,程序退出.

猜你喜欢

转载自blog.csdn.net/weixin_39549161/article/details/85960243