当前位置: 首页 > 面试题库 >

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

佘修为
2023-03-14
问题内容

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

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



 类似资料:
  • 问题内容: 我想删除一些mongodb集合,但这是一个异步任务。代码将是: 控制台显示: 确保删除所有收藏集后将被打印的最简单方法是什么?任何第三方都可以用来简化代码。 问题答案: 我看到您正在使用,因此您正在谈论服务器端JavaScript。在这种情况下,我建议您查看异步模块并使用。您会发现此模块确实有用-它是为解决您所遇到的问题而开发的。您的代码可能如下所示

  • 在我的C#/XAML metro应用程序中,有一个启动长时间运行过程的按钮。因此,按照建议,我使用Async/await来确保UI线程不会被阻塞: 偶尔,GetResults中发生的事情需要额外的用户输入才能继续。为了简单起见,假设用户只需单击“Continue”按钮。 我的问题是:如何挂起GetResults的执行,让它等待一个事件,比如单击另一个按钮? 这里有一个丑陋的方法来实现我所寻找的:C

  • 问题内容: 我有一个过程密集型任务,我想在后台运行。 用户单击一个页面,PHP脚本运行,最后,根据某些条件(如果需要),它必须运行Shell脚本EG: 当前,我使用shell_exec, 但这 需要脚本等待输出。有什么方法可以执行我想要的命令, 而无需 等待命令完成? 问题答案: 如何添加。 请注意,这也摆脱了stdio和stderr。

  • 问题内容: 我正在建立一个带有flask的网站,其中用户具有帐户并能够登录。我正在使用flask-principal作为登录部分和角色管理。有没有办法让用户的会话在5分钟或10分钟后过期?我在flask文档或flask-principal文档中找不到该文件。 我想到了一种手动方法,在登录时在服务器端设置一个带有时间标签的变量,并在用户执行下一个操作时,服务器会验证该时间戳记上的时间增量并删除会话。

  • 我想通过在动词前加一个“X”来标记动词在句子中的位置。我的函数采取以下步骤来实现这一点。 找到动词。我使用spaCy进行POS标记。SpaCy输出一个我称之为的POS标签列表,其中句子中的每个单词都表示为一个标签。 将句子也转换为列表。 确定POS列表中动词标签(例如)的索引。 在索引处插入所需的“X”标记到句子列表中。 第4步假设列表的长度与句子列表的长度相同。通常情况下是这样的,除非spaCy

  • 问题内容: 我非常喜欢Visual Studio在完成已编写的代码和所引用的ALSO代码(各种库/程序集)时为您提供注释文档/参数名称的方式。 在完成代码或将方法悬停在方法上时,是否有一种简单的方法可以在Eclipse中获取内联javadoc /参数名称?通过插件?通过某些设置?使用大量的库(就像在Java中经常发生的那样)然后当您将其放在源jar中时,必须去网站或本地javadoc位置查找信息,