关于python多线程的一些问题。
问题一:如图,为什么会导致这种情况?>>>有什么特殊意义吗?问题二:主线程会在非守护线程都结束后结束,守护线程会在主线程结束后结束。设计了俩个进程,非守护线程t1休眠3秒...
问题一:如图,为什么会导致这种情况?>>>有什么特殊意义吗?问题二:主线程会在非守护线程都结束后结束,守护线程会在主线程结束后结束。设计了俩个进程,非守护线程t1休眠3秒,守护线程t2休眠5秒,3秒后t1结束,主进程也应该结束,t2随之结束。为什么t2还是继续运行执行了5秒后的代码。理解有问题还是程序有问题?驸码import threading,timedef test1(name): print("the thread %s is running,,,\n" %name) time.sleep(3) print("the thread %s is done!" %name)def test2(name): print("the thread %s is running,,,\n" %name) time.sleep(5) print("the thread %s is done!" %name)if __name__=="__main__": print("the main thread is running,,,") t1=threading.Thread(target=test1,args=("no1",)) t2=threading.Thread(target=test2,args=("no2",)) t2.daemon=True t1.start() t2.start() print("the main thread is done!")
展开
1个回答
展开全部
创建的子线程默认是非守护的。
非守护:当主线程结束时,子线程继续运行,二者互不影响。
子线程是守护线程:当主线程结束时,子线程也结束(不管子线程工作有没有完成)。
join作用是线程同步,是让主线程等待子线程结束才结束(主线程完成工作了也不结束,阻塞等待,等子线程完成其工作才一起结束)。
相信此时你已经懂你的两个问题了。
没加join的时候主线程结束了,所以命令提示符>>>就出来了,可是子线程还没结束,过了3/5秒后打印了字符串。加了join后主线程等两个子线程都结束才一起结束,所以最后才出来>>>。
理解确实有点偏差。守护是指子线程守护着主线程,你死我也死,谓之守护。
追问
多谢解释,join这块已经懂了。没有想到的一点是命令行运行和shell运行结果是有偏差的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询