#1. 实例化Thread #2. 继承Thread类 import time from threading import Thread def sleep_task(sleep_time): print("sleep {} seconds start!".format(sleep_time)) time.sleep(sleep_time) print("sleep {} seconds end!".format(sleep_time)) class SleepThread(Thread): def __init__(self, sleep_time): self.sleep_time = sleep_time super().__init__() def run(self): print("sleep {} seconds start!".format(self.sleep_time)) time.sleep(self.sleep_time) print("sleep {} seconds end!".format(self.sleep_time)) if __name__ == "__main__": start_time = time.time() t1 = Thread(target=sleep_task, args=(2,)) t1.setDaemon(True) t1.start() t2 = Thread(target=sleep_task, args=(3,)) t2.setDaemon(True) t2.start() # t1.join() # t2.join() time.sleep(1) end_time = time.time() print("last_time: {}".format(end_time-start_time)) # # #1.当开启一个程序的时候,会默认启动一个主线程 # #2. 如何在主线等到其他线程执行完以后才继续执行, join, setDaemon
区分join与setDaemon
join ()方法:
主线程A中,创建了子线程B,并且在主线程A中调用了B.join(),那么,主线程A会在调用的地方等待,直到子线程B完成操作后,
才可以接着往下执行,那么在调用这个线程时可以使用被调用线程的join方法。
setDeamon
程序运行中,执行一个主线程,如果主线程又创建一个子线程,主线程和子线程就分兵两路,分别运行,那么当主线程完成想退出时,会检验子线程是否完成。
如果子线程未完成,则主线程会等待子线程完成后再退出。但是有时候我们需要的是,只要主线程完成了,不管子线程是否完成,都要和主线程一起退出,这时就可以用setDaemon方法了