2016-03-01 33 views
0

我有那種有一個監視器實例,就像這樣的CherryPy應用:重新啓動一個監視器實例

 mail_checker = Monitor(cherrypy.engine, self.mail_processor.poll_history_feed, frequency=10) 

簡單地檢查新郵件Gmail收件箱,並對其進行處理。有時候poll_history_feed()會拋出一個異常,我現在猜測它是因爲我們的互聯網不穩定,並且在我重新啓動整個應用之前停止運行。 (下面的回溯的樣品)

[01/Mar/2016:17:08:29] ENGINE Error in background task thread function <bound method MailProcessor.poll_history_feed of <mailservices.mailprocessor.MailProcessor object at 0x10a2f0250>>. 
Traceback (most recent call last): 
    File "/Users/hashtaginteractive/Projects/.venvs/emaild/lib/python2.7/site-packages/cherrypy/process/plugins.py", line 500, in run 
    self.function(*self.args, **self.kwargs) 
    File "/Users/hashtaginteractive/Projects/emaild/emaild-source/mailservices/mailprocessor.py", line 12, in poll_history_feed 
    labelIds=["INBOX", "UNREAD"] 
    File "/Users/hashtaginteractive/Projects/.venvs/emaild/lib/python2.7/site-packages/oauth2client/util.py", line 142, in positional_wrapper 
    return wrapped(*args, **kwargs) 
    File "/Users/hashtaginteractive/Projects/.venvs/emaild/lib/python2.7/site-packages/googleapiclient/http.py", line 730, in execute 
    return self.postproc(resp, content) 
    File "/Users/hashtaginteractive/Projects/.venvs/emaild/lib/python2.7/site-packages/googleapiclient/model.py", line 207, in response 
    return self.deserialize(content) 
    File "/Users/hashtaginteractive/Projects/.venvs/emaild/lib/python2.7/site-packages/googleapiclient/model.py", line 262, in deserialize 
    content = content.decode('utf-8') 
    File "/Users/hashtaginteractive/Projects/.venvs/emaild/lib/python2.7/encodings/utf_8.py", line 16, in decode 
    return codecs.utf_8_decode(input, errors, True) 
UnicodeDecodeError: 'utf8' codec can't decode byte 0x8b in position 23: invalid start byte 

有什麼辦法來設置此,以便它會自動重新啓動服務器或每當發生異常這個特殊的監控實例?

回答

0

您必須在try/except塊中將呼叫打包到self.mail_processor.poll_history_feed,並記錄錯誤以方便使用。

def safe_poll_history_feed(self): 
    try: 
     self.mail_processor.poll_history_feed() 
    except Exception: 
     cherrypy.engine.log("Exception in mailprocessor monitor", traceback=True) 

然後使用safe_poll_history_feed方法

相關問題