我在for循环中运行一个函数,如下所示:
for element in my_list:
my_function(element)
Run Code Online (Sandbox Code Playgroud)
由于某种原因,某些元素可能导致函数进入非常长的处理时间(甚至可能是一些我无法真正追踪其来源的无限循环).所以我想添加一些循环控制来跳过当前元素,如果它的处理例如需要超过2秒.如何才能做到这一点?
像这样的东西:
import signal
import time
class Timeout(Exception):
pass
def try_one(func,t):
def timeout_handler(signum, frame):
raise Timeout()
old_handler = signal.signal(signal.SIGALRM, timeout_handler)
signal.alarm(t) # triger alarm in 3 seconds
try:
t1=time.clock()
func()
t2=time.clock()
except Timeout:
print('{} timed out after {} seconds'.format(func.__name__,t))
return None
finally:
signal.signal(signal.SIGALRM, old_handler)
signal.alarm(0)
return t2-t1
def troublesome():
while True:
pass
try_one(troublesome,2)
Run Code Online (Sandbox Code Playgroud)
该函数troublsome永远不会自行返回。如果使用try_one(troublesome,2)成功则2秒后超时。
| 归档时间: |
|
| 查看次数: |
3700 次 |
| 最近记录: |