在python中循环时超时10秒

时间:2017-06-07 05:19:25

标签: python python-2.7

在python

中循环超时的最佳方法是什么

说:

while not buff.endswith('/abc #'):

10秒后,如果不匹配,则打破循环。

谢谢

3 个答案:

答案 0 :(得分:1)

你可以记录循环之前的时间,然后在while循环内你可以比较当前时间,如果它是> 10秒,您可以{while}循环播放break

类似的东西:

from datetime import datetime

start_time = datetime.now()
print(start_time)

while not buff.endswith('/abc #'):
    print('waiting')
    time_delta = datetime.now() - start_time
    print(time_delta)
    if time_delta.total_seconds() >= 10:
        break

答案 1 :(得分:0)

如果您唯一关心的是在10秒后结束循环,请尝试以下代码。

from datetime import datetime 
t1 = datetime.now()
while (datetime.now()-t1).seconds <= 10:
  #do something
  print(datetime.now())

否则检查循环内的时差并将其打破。像,

t1 = datetime.now()  
while not buff.endswith('/abc #'):
  if (datetime.now()-t1).seconds > 10:
    break

答案 2 :(得分:0)

您可以使用interrupting cow package并将代码放在with管理语句中。

import interruptingcow
TIME_WAIT=20 #time in seconds

class TimeOutError(Exception):
    """InterruptingCow exceptions cause by timeout"""
    pass

with interruptingcow.timeout(TIME_WAIT, exception=TimeOutError):
    while not buff.endswith('/abc #'):
        pass #do something or just pass

只要您不将interruptingcow与实现SIGALARM的其他系统一起使用,例如。 stopitpython-rq。会起作用