【问题标题】:How can I implement a timeout function? [duplicate]如何实现超时功能? [复制]
【发布时间】:2020-01-28 16:59:53
【问题描述】:

我正在尝试允许一定的秒数来满足条件。

timeout = time.time() + 15
while SOMETHING NOT MET:
    time.sleep(1)
    if time.time() > timeout:
       raise Exception
continue

这是允许最多 15 秒的正确方法吗?这似乎没有按预期工作。也许有更好/更清洁的方法。

【问题讨论】:

  • 这是否是最好的方法——我无法回答。但是对于这种特定方法,time.sleep 应该 timeout 检查之后进行。
  • @SyntaxVoidsupportsMonica 我更新了,实际上格式化导致一行不显示。
  • 这到底是怎么回事?请更准确地描述您的预期和发生的事情。
  • 我希望您当前的版本能够正常工作(尽管它只检查 timeout-1 而不是 timeout 秒的条件,因为您有 time.sleep 命令 before i> 你的timeout 检查但在你关心检查的条件之后。
  • @mkrieger1 所以我想要实现的是检查 x = y... 虽然 x 还没有,睡眠 1 秒,检查是否达到超时(如果没有,检查x=y) 再次...并在达到超时时再睡一秒钟,最多 15 秒。它似乎在不到 15 秒后继续前进

标签: python python-3.x time


【解决方案1】:

按照signal 模块的documentation 中给出的示例,使用signal.alarm

class TimesUpError(RuntimeException):
    pass


def handler(signum, frame):
    raise TimesUpError


signal.signal(signal.SIGALRM, handler)
signal.alarm(15)
try:
    while SOME_CONDITION:
        time.sleep(1)
except TimesUpError:
    print("Times up, continuing")
finally:
    signal.alarm(0)

根据SOME_CONDITION 是什么,您可以使用signal.sigtimedwait 代替循环。

【讨论】:

  • 谢谢@chepner
猜你喜欢
  • 2011-12-14
  • 2018-10-10
  • 2015-07-19
  • 2013-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-12
相关资源
最近更新 更多