如何在thread1线程结束时终止#sign下方代码的执行?
如何在thread1线程结束时终止#sign下方代码的执行?
嘿,我来帮你搞定这个问题~你的需求其实就是让主线程在子线程thread1跑完之后,立刻停下后续的sleep(100)和print("hello")对吧?先把你贴的代码整理一下方便看:
from time import sleep from threading import Thread def fun1(): sleep(10) thread1 = Thread(target=fun1) thread1.start() #sign sleep(100) print("hello")
下面给你两种简单好用的实现方法:
方法一:用join()等待子线程后直接退出
join()方法的作用就是让主线程暂停,直到指定的子线程执行完毕。我们可以在#sign的位置用它等待thread1结束,然后直接终止主线程,这样后面的代码就不会跑了:
from time import sleep from threading import Thread import sys # 要引入sys模块来退出线程 def fun1(): sleep(10) thread1 = Thread(target=fun1) thread1.start() #sign # 等待thread1执行完成 thread1.join() # 子线程跑完后,直接终止主线程 sys.exit() # 下面这两行代码永远不会执行 sleep(100) print("hello")
这种方法最简单直接,适合你的场景,因为thread1只要10秒就跑完了,主线程等它结束后立刻退出,完全不会走到后面的睡眠和打印步骤。
方法二:用Event实现可中断的等待(更灵活)
如果之后你需要主线程在等待时还能处理其他逻辑,或者不想直接退出主线程,而是跳过特定代码块,可以用Event对象来做信号触发:
from time import sleep from threading import Thread, Event import sys # 创建一个事件对象,用来做子线程和主线程的通信 stop_event = Event() def fun1(): sleep(10) # 子线程完成后,设置事件,给主线程发信号 stop_event.set() thread1 = Thread(target=fun1) thread1.start() #sign # 等待事件触发,最多等100秒(和原来的sleep时长一致) stop_event.wait(100) # 如果事件被触发了(说明thread1已经跑完),就跳过后续代码 if stop_event.is_set(): sys.exit() # 只有当100秒过去了thread1还没跑完,才会执行下面的打印 print("hello")
这个方法的好处是可以灵活控制等待时长,还能在等待期间做其他操作,适合更复杂的场景。
备注:内容来源于stack exchange,提问作者farshadarbab
相关产品推荐
相关产品推荐

