在断开连接的情况下,python-mpd2的代理重新连接

时间:2014-02-06 21:54:33

标签: python python-3.x audio-player

我尝试将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

据我理解这条错误信息,它说“我不知道没有称为'状态'的方法”,我不知怎么理解。但是,我还没有看到如何解决这个问题。

1 个答案:

答案 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()