関数呼び出しの実行時間を制限する
コード内で時折拡張ブロッキングを示すソケット関連の関数呼び出しが発生しました。時には数時間に達することもあります。これは容認できない状況を引き起こします。この問題を軽減するには、コード内で関数の実行時間を制限する解決策を探します。
受け入れられた回答で示唆されているように、別のスレッドを使用すると解決策が得られる可能性があります。ただし、強化されたアプローチは with ステートメントを利用することで、タイムアウト関数の構文上の利便性を提供します。
import signal from contextlib import contextmanager class TimeoutException(Exception): pass @contextmanager def time_limit(seconds): def signal_handler(signum, frame): raise TimeoutException("Timed out!") signal.signal(signal.SIGALRM, signal_handler) signal.alarm(seconds) try: yield finally: signal.alarm(0) try: with time_limit(10): long_function_call() except TimeoutException as e: print("Timed out!")
このアプローチにより、ブロック内でタイムアウトをより適切に処理でき、関数が超過した場合に TimeoutException が発生します。指定された制限時間
以上がPython でブロッキング関数呼び出しの実行時間を制限するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。