我尝试将python-mpd2用于项目。但是,大约一分钟后连接断开。
我用我的低级蟒蛇技能,我试图做出代理来克服这个问题。如果连接中断,目的是重新连接。
这是我得到的
import mpd
class MPDProxy:
def __init__(self, host="localhost", port=6600, timeout=10):
self.client = MPDClient()
self.host = host
self.port = port
self.client.timeout = timeout
self.establish_connection(host, port)
def establish_connection(self, host, port):
self.client.connect(host, port)
def call(self, function, *args):
try:
return self.client.function(*args)
except mpd.ConnectionError:
self.establish_connection(self.host, self.port)
return self.client.function(*args)
但是,调用方法不起作用。
>>> client = MPDProxy()
>>> client.call(status)
Traceback (most recent call last):
File "<console>", line 1, in <module>
NameError: name 'status' is not defined
据我理解这条错误信息,它说“我不知道没有称为'状态'的方法”,我不知怎么理解。但是,我还没有看到如何解决这个问题。
答案 0 :(得分:0)
在一些朋友的帮助下,stackoverflow和一些进一步阅读我可以解决这个问题。这是代码
import mpd
class MPDProxy:
def __init__(self, host="localhost", port=6600, timeout=10):
self.client = mpd.MPDClient()
self.host = host
self.port = port
self.client.timeout = timeout
self.connect(host, port)
def __getattr__(self, name):
return self._call_with_reconnect(getattr(self.client, name))
def connect(self, host, port):
self.client.connect(host, port)
def _call_with_reconnect(self, func):
def wrapper(*args, **kwargs):
try:
return func(*args, **kwargs)
except mpd.ConnectionError:
self.connect(self.host, self.port)
return func(*args, **kwargs)
return wrapper
mpd_proxy = MPDProxy()