在python中循环时超时10秒
在python中,在循环时超时的最佳方法是什么 说: 10秒后,如果不匹配,则中断循环在python中循环时超时10秒,python,python-2.7,Python,Python 2.7,在python中,在循环时超时的最佳方法是什么 说: 10秒后,如果不匹配,则中断循环 谢谢您可以记录循环前的时间,然后在while循环内比较当前时间,如果时间>10秒,您可以中断退出while循环 比如: from datetime import datetime start_time = datetime.now() print(start_time) while not buff.endswith('/abc #'): print('waiting') time_del
谢谢您可以记录循环前的时间,然后在while循环内比较当前时间,如果时间>10秒,您可以
中断
退出while循环
比如:
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
您可以记录循环前的时间,然后在while循环内比较当前时间,如果时间>10秒,您可以
中断
退出while循环
比如:
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
如果您唯一关心的是在10秒后结束循环,请尝试以下代码
from datetime import datetime
t1 = datetime.now()
while (datetime.now()-t1).seconds <= 10:
#do something
print(datetime.now())
如果您唯一关心的是在10秒后结束循环,请尝试以下代码
from datetime import datetime
t1 = datetime.now()
while (datetime.now()-t1).seconds <= 10:
#do something
print(datetime.now())
您可以使用管理语句将代码放入中
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
。它将起作用您可以使用
管理声明将代码放入中
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
。它会起作用的请让问题更加清晰。你想在10秒后中断而循环吗?我很惊讶没有人建议使用某种睡眠来阻止代码阻塞其他线程。buf
是异步填充的吗?请进一步澄清问题。你想在10秒后中断而循环吗?我很惊讶没有人建议使用某种睡眠来阻止代码阻塞其他线程。buf
是异步填充的吗?不应该是(datetime.now()-t1).总秒数()
而不是.seconds
?请参阅:这不应该是(datetime.now()-t1).总秒数()而不是.seconds
?请参阅:这不应该是时间增量.总秒数()
而不是时间增量.秒数
?请看:@Deantwo-两者在这里的作用相同。您所指的答案是在不同的上下文中,seconds
是一个时间的秒值,可能有许多分钟和小时。这里,total_seconds
和seconds
都是从0
开始的时间,因此返回相同的值(因为我们在10秒后中断,所以不可能有分钟或小时)。如果您相信您的代码永远不会被用于超时超过59秒,当然没关系。这似乎是一个有待解决的问题。这是有道理的@Deantwo-如果维护代码的人想要将10
更改为>59,那么这确实是一个问题seconds
仅在此上下文(<60)中有效,而total_seconds()
对任何超时值都有效。这不应该是time_delta.total_seconds()
而不是time_delta.seconds
?请看:@Deantwo-两者在这里的作用相同。您所指的答案是在不同的上下文中,seconds
是一个时间的秒值,可能有许多分钟和小时。这里,total_seconds
和seconds
都是从0
开始的时间,因此返回相同的值(因为我们在10秒后中断,所以不可能有分钟或小时)。如果您相信您的代码永远不会被用于超时超过59秒,当然没关系。这似乎是一个有待解决的问题。这是有道理的@Deantwo-如果维护代码的人想要将10
更改为>59,那么这确实是一个问题seconds
仅在此上下文(<60)中有效,而total_seconds()
对任何超时值都有效。