ホームページ >バックエンド開発 >Python チュートリアル >Python で関数のタイムアウトを適切に処理するにはどうすればよいですか?

Python で関数のタイムアウトを適切に処理するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-20 22:44:09775ブラウズ

How Can I Gracefully Handle Function Timeouts in Python?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。