Python でのタイムアウトによる関数の中断
無期限に停止してスクリプトの実行が妨げられる可能性がある関数を呼び出す場合、次のことが必要になります。タイムアウトメカニズムを実装します。 Python の signal パッケージは、この問題の解決策を提供します。
主に UNIX システムで使用される signal パッケージを使用すると、特定の関数のタイムアウトを設定できます。関数が指定されたタイムアウトを超えると、シグナルが発生して実行が中断されます。
例:
無期限に実行される可能性がある関数loop_forever()を考えてみましょう。この関数を呼び出す必要がありますが、タイムアウトを 5 秒に設定します。関数に 5 秒以上かかる場合は、その実行をキャンセルします。
import signal # Register a handler for the timeout def handler(signum, frame): print("Timeout! Cancelling function execution.") raise Exception("Timeout exceeded!") # Register the signal function handler signal.signal(signal.SIGALRM, handler) # Define a timeout of 5 seconds signal.alarm(5) try: loop_forever() except Exception as e: print(str(e)) # Cancel the timer if the function finishes before timeout signal.alarm(0)
この例では、5 秒後にハンドラー関数が呼び出され、例外が発生します。この例外は親コードでキャッチされ、タイマーがキャンセルされ、loop_forever() 関数の実行が終了します。
以上がPython 関数の実行をタイムアウトで中断するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。