在python
中循环超时的最佳方法是什么说:
while not buff.endswith('/abc #'):
10秒后,如果不匹配,则打破循环。
谢谢
答案 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
的其他系统一起使用,例如。 stopit
,python-rq
。会起作用