设置连接服务的超时时间

时间:2017-04-05 07:29:49

标签: python timeout

我有一项服务,我的代码尝试使用API​​连接到它:

import my_srvice_api

它没有任何超时机制,如果服务没有运行,我的代码会一直等待,我想尝试并在超时后提出异常,我该怎么做呢:

timeout = 3
try:
     obj = my_service_api.connect()
except TimeoutException as e:
     print("service my_service start")

1 个答案:

答案 0 :(得分:1)

我添加了这个装饰器(基于this帖子)及其作品。感谢所有参与此问题的人。

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)