python如果需要的时间超过它应该中断一个命令

hmg*_*aly 5 python

可能重复:
Python函数调用
超时如何在python中超时函数,timout不到一秒钟

我在for循环中运行一个函数,如下所示:

for element in my_list:
    my_function(element)
Run Code Online (Sandbox Code Playgroud)

由于某种原因,某些元素可能导致函数进入非常长的处理时间(甚至可能是一些我无法真正追踪其来源的无限循环).所以我想添加一些循环控制来跳过当前元素,如果它的处理例如需要超过2秒.如何才能做到这一点?

the*_*olf 1

像这样的东西:

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秒后超时。