2014-02-06 29 views
0

我嘗試使用python-mpd2作爲項目。但是,大約一分鐘後連接就會中斷。代理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 

據我瞭解此錯誤消息,它說:「我不知道有沒有所謂的‘地位’法」,我莫名其妙地理解。但是,我看不到如何解決這個問題(還)。

回答

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() 
相關問題