Python 在一定时间后使函数超时
我有一个长时间运行的线程,它调用一个方法。我想为一个超过一定时间的方法实现一个超时,然后退出该方法,但不退出线程 注意:我的用例是(Objective),我有一个线程,它不断地从实时数据流中轮询,并用某种方法处理它(对于某些数据点可能会花费无限的时间)。所以我想让方法超时,而不是线程超时,这样我就可以继续轮询实时数据 下面是我试图修复的示例代码。当我们启动一个线程并创建一个异常时,它就工作了,但是有一个以上的线程信号不工作Python 在一定时间后使函数超时,python,multithreading,timer,signals,Python,Multithreading,Timer,Signals,我有一个长时间运行的线程,它调用一个方法。我想为一个超过一定时间的方法实现一个超时,然后退出该方法,但不退出线程 注意:我的用例是(Objective),我有一个线程,它不断地从实时数据流中轮询,并用某种方法处理它(对于某些数据点可能会花费无限的时间)。所以我想让方法超时,而不是线程超时,这样我就可以继续轮询实时数据 下面是我试图修复的示例代码。当我们启动一个线程并创建一个异常时,它就工作了,但是有一个以上的线程信号不工作 from threading import Thread import
from threading import Thread
import time
import signal
def random_func(a):
time.sleep(a)
return True
class TimeoutException(Exception): # Custom exception class
pass
def timeout_handler(signum, frame): # Custom signal handler
raise TimeoutException
signal.signal(signal.SIGALRM, timeout_handler)
class CheckThreadSignal(Thread):
def __init__(self, thread_id):
self.thread_id = thread_id
super().__init__()
def run(self):
c = 0
while True:
signal.alarm(5)
try:
if self.thread_id == 2 and c == 10:
random_func(10)
else:
random_func(0.1)
except TimeoutException:
print("signal: {}".format(self.thread_id), e)
continue
else:
signal.alarm(0)
print("running: {}, count: {}".format(self.thread_id, c))
time.sleep(0.1)
c+=1
CheckThreadSignal(0).start()
CheckThreadSignal(2).start()
这回答了你的问题吗@mkrieger1否,因为该方法未在线程内调用。我没有写过try,除了在方法中。