我遇到了一个问题,一个方法调用一直阻塞不释放。很不幸,导致这个问题的bug并没有确切的解决方法,因此目前的解决方法是设置一个超时时间。
我尝试通过注册计时器,并在其触发时抛出异常来中断阻塞的调用。然而,这会在计时器线程而不是主线程中引发异常。
它现在看起来像这样:
我尝试通过注册计时器,并在其触发时抛出异常来中断阻塞的调用。然而,这会在计时器线程而不是主线程中引发异常。
它现在看起来像这样:
from threading import Timer
def timeoutSocket():
raise InterruptedError
socketDeadlockDetector = Timer(DEADLOCK_TIMEOUT, timeoutSocket)
socketDeadlockDetector.start()
# receive and unpack data
try:
packet = server.receive()
except InterruptedError:
print("Interrupted socket receive, continuing")
continue
socketDeadlockDetector.cancel()
server.receive()
是一个不应该阻塞的方法。然而,当我运行这个方法时,socketDeadlockDetector
线程会自行中断而不影响原始线程。
有没有办法将此异常传递给父级?
select.select()
,那么它有机会运行其他代码(例如,检查超时是否已过期),在检查是否有更多数据可以从套接字中读取之间。 - Daniel Pryden