我有一个服务,我的代码尝试使用 API 连接到它:
import my_srvice_api
它没有任何超时机制,如果服务未运行,我的代码会一直等待,我想尝试并在超时后引发异常,我该怎么做:
timeout = 3
try:
obj = my_service_api.connect()
except TimeoutException as e:
print("service my_service start")
我添加了这个装饰器(基于这篇文章(及其作品。感谢所有关注这个问题的人。
import threading
import sys
class TimeoutError(Exception): pass
def timelimit(timeout):
def internal(function):
def internal2(*args, **kw):
class Calculator(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
try:
function(*args, **kw)
except:
pass
c = Calculator()
c.start()
c.join(timeout)
if c.isAlive():
raise TimeoutError
return internal2
return internal
然后我把这个装饰器添加到我的函数中:
@timelimit(2)
def time_out_api():
obj = my_service_api.connect()
try:
time_out_api()
except TimeoutError as e:
print("service my_service start")
exit(0)