我一直在试图创建一个超时,告诉我的代码的一部分,如果它在一定的时间内没有达到结果,继续前进。休息功能,并在一段时间后过去 - Python
我测试了从这里发布的主要答案中的代码:break the function after certain time,它的工作原理非常完美,但是当我使用我的代码实现它时无法正常工作。
无论“Try”内的代码块执行多长时间,TimeoutException都不会被触发。代码块内的计时器始终以大于5秒的时间间隔打印,即使代码花费的时间超过signal.alarm(5)允许的5秒钟时间,甚至不应该调用打印操作。
你能想到TimeoutException没有被触发的任何原因,我该如何解决它?
import signal
import time
def evaluateList(dataDictionaryList):
newDataDict = []
count = 0
class TimeoutException(Exception):
pass
def timeout_handler(signum, frame):
raise TimeoutException
signal.signal(signal.SIGALRM, timeout_handler)
for dataDictionary in dataDictionaryList:
signal.alarm(5)
try:
startTime = time.time()
newDataDict.append(functionThatMightHang(dataDictionary))
print(count + 1, ' Time to evaluate: ', time.time() - startTime)
count+=1
except TimeoutException:
print('took too long')
continue
else:
signal.alarm(0)
return newDataDict