You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 11:28:05