2016-11-14 42 views
0

我想保持線程工作事件,如果它引發一個錯誤。 (python2)Python,如何保持線程正常工作?

工作線程:

def thread_update(n): 
    """Send the data to server per n second.""" 
    while True: 
     update_data() # the function that posting data to server 
     time.sleep(n) 

thread_u = threading.Thread(name='thread_u', target=thread_update, args=(5,)) 
thread_u.start() 

當我關閉服務器,該thread_u會引發錯誤並退出:

Exception in thread thread_u 
... 
HTTPError: HTTP Error 502: Bad Gateway 

所以我創建了一個守護線程,以保持它的工作(當thread_u退出時,我想再次啓動它)

守護線程:

def thread_daemon(n): 
    while True: 
     if not thread_u.isAlive(): 
      thread_u.run() 
     time.sleep(n) 

thread_d = threading.Thread(name='thread_d', target=thread_daemon, args(60)) 
thread_d.start() 

現在的問題是,守護進程只是一次工作,並退出相同的錯誤。

Exception in thread thread_u 
... 
HTTPError: HTTP Error 502: Bad Gateway 


Exception in thread thread_d 
... 
HTTPError: HTTP Error 502: Bad Gateway 

是否有無論如何保持thread_d工作事件,如果它引發一個錯誤。或者無論如何保持thread_u工作事件,如果它引發一個錯誤。

回答

1

如果你的目標是讓你的線程的工作,只是處理的內部異常的run

def thread_update(n): 
    while True: 
     try: 
      update_data() 
      time.sleep(n) 
     except Exception as error: 
      print(error) 
0

你可以發現異常。

try: 
    update_data() 
except HTTPError as e: 
    print(e,file=sys.stderr) 
0

你爲什麼不在thread_update中發現異常?

import logging 

def thread_update(n): 
    """Send the data to server per n second.""" 
    while True: 
     try: 
      update_data() # the function that posting data to server 
     except HTTPError: 
      logging.exception("meh") 
     time.sleep(n) 

thread_u = threading.Thread(name='thread_u', target=thread_update, args=(5,)) 
thread_u.start()