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

标签 python

我需要在脚本中等待,直到一定数量的条件变为真?

我知道我可以使用条件变量和 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/

相关文章:

python - 如何在 Google AppEngine 上实现 "autoincrement"

python - 在 numpy 中使用 savetxt 和自定义数据类型

python - 如何测试 stanfordnlp 是否在 GPU 上运行?

python - 如何在 to_json 中包含 Dataframe 的名称(Pandas)

python - Django 是否提供任何内置方式来更新 PostgreSQL 自动增量计数器?

python - 读取多个csv文件并将其写入另一个csv文件

python - 如何将 Spacy en_core_web_md 模型放入 Python 包中

Python Pandas 更新数据框并计算更新的单元格数量

python - HTML URL生成下载时如何了解PDF的内容类型

python - 使用 Cython 访问 C 头魔数(Magic Number)/标志