2013-06-12 25 views
3

我有一個類threading.thread的子類。在初始化線程對象的守護進程中,我定期檢查線程狀態。如果狀態不完整且線程不活動,則表示在執行類似於api調用另一個服務器的操作時出錯。使死線程的副本

我的問題是,如果發生這種情況是有可能使線程對象的副本,並調用啓動方法。我曾考慮過在原始對象上再次調用run方法,但這會弄亂守護進程的工作流程。

任何想法非常感謝!

Ç

回答

1

把一個無限循環的守護進程,並檢查的IsAlive()/ is_alive()方法,如果出了問題。如果它剛剛使用相同的值啓動一個新對象。

解決您的問題的另一種方法是捕捉線程對象中的真正問題,並在那裏處理問題。我假設你在run()方法中有一個循環。只需將try/except子句中的所有內容都放入循環中即可重新初始化您在檢查其他服務器時所做的任何操作。

事情是這樣的:

def run(self): 
    while 1: 
     try: 
      if not server.isconnected(): 
       server.connect() 

      server.getsomeinfo() 
     except server.error as x: 
      server.disconnect() 

     time.sleep(1) 

這會盡快,因爲它是類型server.error的錯誤重新連接。您可以使解決方案更漂亮,並在重試之前添加一些間隔等。我已經完成了這個工作,它完美地工作。