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

如何实现程序等待至任一条件为True后继续执行?

实现程序等待任一条件满足的方案

你需要的是让程序阻塞等待,直到任意一个条件变为True,之后根据触发的条件执行对应逻辑,本质是「多条件阻塞等待+分支判断」。以下是几种常见场景的实现方式:

单线程轮询实现(通用基础方案)

适合简单的单线程场景,通过定期检查条件状态来实现等待:

# 示例条件判断函数,根据实际需求替换
def first_condition():
    # 这里编写你的第一个条件逻辑,返回True/False
    return False

def second_condition():
    # 这里编写你的第二个条件逻辑,返回True/False
    return False

# 阻塞等待,直到任一条件满足
while True:
    if first_condition():
        # 第一个条件满足时的执行逻辑
        print("触发第一个条件,执行对应操作")
        break
    elif second_condition():
        # 第二个条件满足时的执行逻辑
        print("触发第二个条件,执行对应操作")
        break
    # 可选:添加短暂休眠,降低CPU占用
    import time
    time.sleep(0.1)

# 条件满足后,继续执行后续通用代码
print("程序继续执行")

多线程/异步场景优化(无轮询)

如果条件由其他线程或异步任务触发,使用事件通知机制可以避免轮询,提升效率。以Python为例:

import threading
import time

# 创建事件对象,用于线程间通知
first_trigger = threading.Event()
second_trigger = threading.Event()

# 模拟其他线程触发条件的逻辑
def simulate_first_trigger():
    time.sleep(3)  # 模拟耗时操作
    first_trigger.set()  # 触发第一个条件

def simulate_second_trigger():
    time.sleep(2)  # 模拟耗时操作
    second_trigger.set()  # 触发第二个条件

# 启动触发线程
threading.Thread(target=simulate_first_trigger).start()
threading.Thread(target=simulate_second_trigger).start()

# 等待任一事件触发
print("等待条件触发...")
# Python 3.10+ 可直接使用更简洁的API:
# threading.wait_for_any([first_trigger, second_trigger])
# 兼容旧版本的写法:
while not first_trigger.is_set() and not second_trigger.is_set():
    time.sleep(0.1)

# 判断哪个条件被触发
if first_trigger.is_set():
    print("第一个条件已满足")
elif second_trigger.is_set():
    print("第二个条件已满足")

# 后续通用代码
print("程序继续执行")

其他语言思路

  • Java:可使用CountDownLatch或Condition配合Lock实现多条件等待
  • C++:使用std::condition_variable结合标志位,或C++20的std::latch
  • JavaScript(Node.js):使用Promise.race()处理异步条件等待

内容的提问来源于stack exchange,提问作者ابن آدم

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:20:31