在Python中是否有一种简单的方法可以等待某些条件成立?
我需要在脚本中等待,直到满足一定条件为止?
我知道我可以使用条件变量和朋友来滚动自己的事件,但是我不想经历实现它的所有麻烦,因为某些对象属性更改来自包装的C
库(Boost.Python)中的外部线程,所以我不能只是劫持__setattr__
一个类并在其中放置一个条件变量,这使我要么尝试从C
创建并发送一个Python条件变量,要么包装一个本机变量并在Python中等待它,这两种声音愚蠢的,不必要的复杂和无聊。
有没有更简单的方法来做到这一点,而无需持续轮询病情?
理想的情况是
res = wait_until(lambda: some_predicate, timeout)if (not res):
print 'timed out'
回答:
不幸的是,满足您的约束的唯一可能性是定期 轮询 ,例如:
import timedef 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
s或其他方法进行检测等进行优化),但是按照您所要求的一般术语,这种低效的方法是唯一的出路。
以上是 在Python中是否有一种简单的方法可以等待某些条件成立? 的全部内容, 来源链接: utcz.com/qa/423710.html