关于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!") 展开
 我来答
就爱纯净水520
2018-08-29 · TA获得超过262个赞
知道小有建树答主
回答量:115
采纳率:68%
帮助的人:19.6万
展开全部
  1. 创建的子线程默认是非守护的。

  2. 非守护:当主线程结束时,子线程继续运行,二者互不影响。

  3. 子线程是守护线程:当主线程结束时,子线程也结束(不管子线程工作有没有完成)。

  4. join作用是线程同步,是让主线程等待子线程结束才结束(主线程完成工作了也不结束,阻塞等待,等子线程完成其工作才一起结束)。

相信此时你已经懂你的两个问题了。

  1. 没加join的时候主线程结束了,所以命令提示符>>>就出来了,可是子线程还没结束,过了3/5秒后打印了字符串。加了join后主线程等两个子线程都结束才一起结束,所以最后才出来>>>。

  2. 理解确实有点偏差。守护是指子线程守护着主线程,你死我也死,谓之守护。

追问
多谢解释,join这块已经懂了。没有想到的一点是命令行运行和shell运行结果是有偏差的。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式