Python超时处理



当我连接到CIM服务器时,我正在尝试处理超时异常,如下所示:

 si = pywbem.WBEMConnection(HOST, ("root", "passwrord"), "ns",no_verification=True)

我在谷歌上搜索了一下,这个函数有一个参数名称:"timeout",但它只适用于较新版本的PyWBEM,不幸的是我不能使用它。

5分钟后我得到的错误:

pywbem.cim_operations.CIMError:(0,'套接字错误:[Erno 110]连接超时)

我想把这个间隔时间定为30秒。我该怎么做?我接受各种解决方案。我在想一个while循环,它倒计时30秒,但我不知道如何检查连接是否建立。

感谢

嗯。。。我想您必须创建某种类型的异步进程来进行检查。

借用Rich的解决方案,以下是我要尝试的:

import multiprocessing.pool
import functools
def timeout(max_timeout):
    """Timeout decorator, parameter in seconds."""
    def timeout_decorator(item):
        """Wrap the original function."""
        @functools.wraps(item)
        def func_wrapper(*args, **kwargs):
            """Closure for function."""
            pool = multiprocessing.pool.ThreadPool(processes=1)
            async_result = pool.apply_async(item, args, kwargs)
            # raises a TimeoutError if execution exceeds max_timeout
            return async_result.get(max_timeout)
        return func_wrapper
    return timeout_decorator
@timeout(30) # timeout after 30 seconds
def connect():
    return pywbem.WBEMConnection(HOST, ("root", "passwrord"), "ns",no_verification=True)
try:
    si = connect()
except multiprocessing.TimeoutError:
    si = "Connection timed out after 30 seconds"
print si

相关内容

  • 没有找到相关文章

最新更新