2016-07-25 320 views
0
import multiprocessing.pool 
import functools 
import time 
import sys 
def timeout(max_timeout): 
    def timeout_decorator(item): 
     @functools.wraps(item) 
     def func_wrapper(*args, **kwargs): 
      pool = multiprocessing.pool.ThreadPool(processes=1) 
      async_result = pool.apply_async(item, args, kwargs) 
      return async_result.get(max_timeout) 
     return func_wrapper 
    return timeout_decorator 

我從SE獲得此代碼。這會引起系統級超時錯誤。 我怎麼能處理這個錯誤,並在彈出錯誤時做其他事情處理超時錯誤(python)

請注意我是一個Python新手。 在此先感謝

回答

0

你可以用一個錯誤,使用try /除外:

try: 
    do_something_that_can_raise_error_X() 
except X: 
    do_something_when_error_X_is_raised() 
+0

我已經使用過它,但它無法捕獲超時錯誤。 – taz

0

你需要用可能會提高在「嘗試」這個異常,然後您期望的例外,除了代碼。

from multiprocessing import TimeoutError 

try: 
    # actions that raise TimeoutError 
except TimeoutError: 
    # handle TimeoutError 
else: 
    # (optional) actions for when there is no TimeoutError 
finally: 
    # (optional) actions to perform in any case 

看到這個example in the multiprocessing docs

請注意,如果使用除了未列出精確異常類型的except語句,則可以在語法上使用,但不是一個好主意。

此外,您可能想了解如何處理python中的異常,請參閱任何python教程。

+0

@Timeout(10) 高清SLEEP1(): 嘗試: time.sleep(20)除了TimeoutError : 打印 「超時」 我仍然有回溯(最近通話最後一個): 文件「d:\ test1的py 「爲24行,在 SLEEP1() 文件 」d:\ test1.py「,第12行,在func_wrapper 返回async_result.get(max_timeout) 文件」 C:\ Python27 \ lib中\多處理\池.py「,第550行,獲取 raise TimeoutError TimeoutError – taz

+0

time.sleep(20)不是引發TimeoutError的代碼。您必須放入試用/除了實際使用多處理的代碼部分。再看看他們如何讓單個員工睡眠10秒,除了文檔中的TimeoutError。 – kstera