ホームページ >バックエンド開発 >Python チュートリアル >タイムアウトによる Python 関数の無期限停止を防ぐにはどうすればよいですか?

タイムアウトによる Python 関数の無期限停止を防ぐにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-24 00:55:09961ブラウズ

How Can I Prevent Indefinitely Halting Python Functions with a Timeout?

関数呼び出しのタイムアウト

スクリプトの実行を無期限に停止する可能性のある関数を Python で呼び出す場合、次のメカニズムを確立する必要があります。それを防ぎます。解決策は、スクリプトが介入して関数を終了するタイムアウトしきい値を設定することです。

Signal パッケージの使用

UNIX ベースのシステムの場合、signal パッケージ堅牢なソリューションを提供します。これを利用するには:

  1. シグナル パッケージをインポートします: import signal
  2. タイムアウト時に呼び出されるハンドラー関数を定義します。この関数はプロセスを終了する例外を発生させる必要があります。
  3. タイムアウト期間を指定するには、signal.alarm() 関数を使用します。
  4. signal.signal(signal.SIGALRM を使用して SIGALRM シグナル ハンドラーを設定します) 、ハンドラー).
  5. try ブロック内でストールする可能性のある関数を呼び出します。タイムアウトが発生した場合、ハンドラー例外が発生します。
  6. 必要に応じて、割り当てられた時間内に関数が完了したら、signal.alarm(0) を使用してタイマーをキャンセルします。

これは具体的な例です:

import signal

# Handler function
def handler(signum, frame):
    print("Timeout reached!")
    raise Exception("Timeout exception")

# Function that may stall indefinitely
def loop_forever():
    while True:
        print("Looping")
        # Pause execution for 1 second
        time.sleep(1)

# Set timeout to 5 seconds
signal.alarm(5)
signal.signal(signal.SIGALRM, handler)

try:
    loop_forever()
except Exception as exc:
    print("Exception:", exc)

関数loop_forever()が5以内に完了しなかった場合秒経過すると、ハンドラー関数が呼び出され、タイムアウト例外が発生してプロセスが終了します。

以上がタイムアウトによる Python 関数の無期限停止を防ぐにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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