我需要在脚本中等待,直到一定数量的条件变为真?
我知道我可以使用条件变量和 friend 来滚动自己的事件,但我不想经历实现它的所有麻烦,因为一些对象属性更改来自包装 C++ 库(Boost. Python),所以我不能只是在一个类中劫持 __setattr__
并在那里放置一个条件变量,这让我要么尝试从 C++ 创建和发送 Python 条件变量,要么包装一个原生的然后在 Python 中等待它,这两种方法听起来都很繁琐、不必要的复杂和无聊。
有没有更简单的方法来做到这一点,除非连续轮询条件?
理想情况下是这样的
res = wait_until(lambda: some_predicate, timeout)
if (not res):
print 'timed out'
最佳答案
不幸的是,满足您的限制的唯一可能性是定期投票,例如....:
import time
def wait_until(somepredicate, timeout, period=0.25, *args, **kwargs):
mustend = time.time() + timeout
while time.time() < mustend:
if somepredicate(*args, **kwargs): return True
time.sleep(period)
return False
之类的。如果 somepredicate
可以分解(例如,如果已知它是多个子句的 and
,尤其是如果其中一些子句依次受制于通过 threading.Event
或其他任何东西等可检测到的优化,但在您要求的一般术语中,这种低效的方法是唯一的出路。
关于python - Python中是否有一种简单的方法可以等到某些条件成立?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2785821/