簡體   English   中英

斷開連接時重新連接python-mpd2的代理

[英]proxy for python-mpd2 to reconnect in case of disconnection

我嘗試將python-mpd2用於項目。 但是,大約一分鍾后,連接斷開。

我以較差的python技能嘗試嘗試代理以克服此問題。 目的是在連接斷開時重新連接。

據我所知

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

據我了解此錯誤消息,它說:“我不知道沒有一種方法叫做'狀態'”,我對此有所了解。 但是,我還看不到如何解決這個問題。

在一些朋友的幫助下,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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM