2016-07-25 14 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の初心者ですか?あなたがするtry/exceptを使用して、エラーをラップすることができます

答えて

0

事前に ありがとう:

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を参照してください。

例外的な例外タイプを列挙しない以外は、構文的には使用できますが、これはお勧めできません。

また、Pythonで例外を処理する方法については、Pythonチュートリアルを参照してください。

+0

@timeout(10) デフSLEEP1(): 試み:TimeoutError除く time.sleep(20) : プリントは "タイムアウトが発生し、" まだ私は(最後の最新の呼び出し)トレースバックを得た: ファイル「D:\ test1のを" SLEEP1において、ライン24、() ファイル "の.py D:" func_wrapper 戻りasync_result.get(max_timeout)において、ライン12、 ファイル" \ test1.py C:\ Python27 \ LIB \ \プールマルチプロセッシング.py "、行550、get raise TimeoutError TimeoutError – taz

+0

time.sleep(20)はTimeoutErrorを発生させるコードではありません。実際にマルチプロセッシングを使用するコードの部分を除いてtry/insideの中に入れなければなりません。どのようにして1人のワーカーを10秒間スリープさせるか、そしてその例のドキュメントのTimeoutErrorを除きます。 – kstera