当我连接到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