看完理论知识要多动手打打代码,会发现很多问题,例如我代码中注释写道,你用setDaemon,然后没有join,然后就没有然后了,什么都没有
import threading
import time
# number 为看电影的时间
def see_movie(number):
time.sleep(number)
print("我看了一部电影"," time at ",time.time())
#number 为睡觉的时间
def sleep_num(number):
time.sleep(number)
print("我躺尸了",number," 秒 time at ",time.time())
if __name__ == '__main__':
time_start=time.time()
# see_movie(2)
# 不用线程用了两倍时间可以去试一下
# sleep_num(2)
threads=[]
th1=threading.Thread(target=see_movie,args=(2,))
threads.append(th1)
th2=threading.Thread(target=sleep_num,args=(2,))
threads.append(th2)
for th in threads:
th.setDaemon(True)
th.start()
for th in threads:
# 设置了setDaemon
# 原来是setDaemon,主线程启动两个子线程后
# 做事后,主线程就不管子线程是否运行完毕,直接往下运行,然后就结束了
# 去掉join(),会发生什么,大家可以试一下
# join()是让主线程等待子线程运行完
th.join()
time_finish = time.time()
print("经历了",str(time_finish-time_start))
运行结果使用线程:
我躺尸了 2 秒 time at 1517900366.5001836
我看了一部电影 time at 1517900366.5001836
经历了 2.002114772796631
运行结果不用线程:
我看了一部电影 time at 1517900827.910157
我躺尸了 2 秒 time at 1517900829.9110706
经历了 4.001024484634399