在Python中是否有一种简单的方法可以等待某些条件成立?

我需要在脚本中等待,直到满足一定条件为止?

我知道我可以使用条件变量和朋友来滚动自己的事件,但是我不想经历实现它的所有麻烦,因为某些对象属性更改来自包装的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.Events或其他方法进行检测等进行优化),但是按照您所要求的一般术语,这种低效的方法是唯一的出路。

以上是 在Python中是否有一种简单的方法可以等待某些条件成立? 的全部内容, 来源链接: utcz.com/qa/423710.html

回到顶部