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

发布于 2021-01-29 15:07:19

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

我知道我可以使用条件变量和朋友来滚动自己的事件,但是我不想经历实现它的所有麻烦,因为某些对象属性更改来自包装的C
库(Boost.Python)中的外部线程,所以我不能只是劫持__setattr__一个类并在其中放置一个条件变量,这使我要么尝试从C

创建并发送一个Python条件变量,要么包装一个本机变量并在Python中等待它,这两种声音愚蠢的,不必要的复杂和无聊。

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

理想的情况是

res = wait_until(lambda: some_predicate, timeout)
if (not res):
    print 'timed out'
关注者
0
被浏览
59
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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

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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看