2012-06-18 60 views
3

我已經制作了一個基於cherrypy的服務器,但我有一個需要很長時間(超過一分鐘)運行的重複性任務。這一切都很好,直到我需要關閉服務器,然後我永遠等待線程完成。如何檢測cherrypy是否關閉

我想知道如何檢測客戶端線程內的cherrypy shutdown,以便服務器關閉時線程可以中止。

我這樣的事情後,我:

class RootServer: 
    @cherrypy.expose 

    def index(self, **keywords): 
     for i in range(0,1000): 
      lengthyprocess(i) 
      if server_is_shutting_down(): 
       return 

回答

6

您可以直接檢查狀態:

if cherrypy.engine.state != cherrypy.engine.states.STARTED: 
    return 

或者,您可以在 '停止' 頻道註冊一個監聽器:

class RootServer: 

    def __init__(self): 
     cherrypy.engine.subscribe('start', self.start) 
     cherrypy.engine.subscribe('stop', self.stop) 

    def start(self): 
     self.running = True 

    def stop(self): 
     self.running = False 

    @cherrypy.expose 
    def index(self, **keywords): 
     for i in range(0,1000): 
      lengthyprocess(i) 
      if not self.running: 
       return 

如果您還想讓長處理開始(或執行一些準備工作配給)服務器啓動時,而不是一個請求。

+0

感謝您的出色反應。第二種技術不太有效,因爲直到線程停止之後才調用self.stop,直到self.stop被調用後線程纔會停止。一個僵局的位,但第一種技術是一種享受。 –