思考下述代码的执行结果有可能是哪些情况?为什么?
1 from threading import Thread 2 import time 3 4 def foo(): 5 print(123) 6 time.sleep(1) 7 print("end123") 8 9 def bar(): 10 print(456) 11 time.sleep(3) 12 print("end456") 13 14 if __name__ == '__main__': 15 t1=Thread(target=foo) 16 t2=Thread(target=bar) 17 18 t1.daemon=True 19 t1.start() 20 t2.start() 21 print("main-------")
分析:
t1是主线程"main-------"的守护线程,所以在主线程结束后,t1就会结束.主线程在等待t2运行完毕后才会结束,但是t2中有个2秒的延时,t1中有个1秒的延时,这意味着,在等待t2运行结束的这段时间里,t1早就结束了.(也就是说,t1不用等待主线程结束后才结束).所以,上面代码的输出结果应该是:
1 123 2 456 3 main------- 4 end123 5 end456