Python での関数タイムアウト処理
無期限に実行される可能性のある関数を呼び出す場合、またはスクリプトの終了が必要な問題が発生する可能性がある関数を呼び出す場合、タイムアウト メカニズムが便利です。 。 Python では、次のメソッドを利用して関数のタイムアウトを適切に処理できます。
シグナル モジュールの使用:
UNIX システムで実行している場合、シグナル パッケージはタイムアウトを処理する方法。タイムアウトハンドラを登録することで、あらかじめ設定した制限時間を超えた場合に関数の実行をキャンセルすることができます。シグナルを使用した例を次に示します。
import signal # Register a handler for the timeout def handler(signum, frame): print("Forever is over!") raise Exception("end of time") # Define a potentially long-running function def loop_forever(): import time while 1: print("sec") time.sleep(1) # Set up the signal handler signal.signal(signal.SIGALRM, handler) # Define the timeout duration (in seconds) timeout = 10 signal.alarm(timeout) # Attempt to execute the function try: loop_forever() except Exception as exc: print(exc) # Cancel the timeout after the function completes signal.alarm(0)
関数loop_forever()が10秒のタイムアウトを超えると、ハンドラー関数が呼び出され、メインコードで処理できる例外が発生します。
注:
信号モジュールは注意して使用することが重要です。これは完全にスレッドセーフではないため、マルチスレッド アプリケーションでの使用は避けることをお勧めします。
以上がPython で関数のタイムアウトを適切に処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。