小编典典

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

python

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

我知道我可以使用条件变量和朋友来滚动自己的事件,但是我不想经历实现它的所有麻烦,因为某些对象属性更改来自包装的C
库(Boost.Python)中的外部线程,所以我不能只是劫持__setattr__一个类并在其中放置一个条件变量,这使我要么尝试从C
创建并发送一个Python条件变量,要么包装一个本机变量并在Python中等待它,这两种声音愚蠢的,不必要的复杂和无聊。

有没有更简单的方法来做到这一点,而无需持续轮询病情?

理想的情况是

res = wait_until(lambda: some_predicate, timeout)
if (not res):
    print 'timed out'

阅读 861

收藏
2021-01-20

共1个答案

小编典典

不幸的是,满足您的约束的唯一可能性是定期 轮询 ,例如:

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或其他方法进行检测等进行优化),但是按照您所要求的一般术语,这种低效的方法是唯一的出路。

2021-01-20