ホームページ  >  記事  >  バックエンド開発  >  ブロックを防ぐために関数呼び出しの時間制限を実装するにはどうすればよいですか?

ブロックを防ぐために関数呼び出しの時間制限を実装するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-22 09:24:15222ブラウズ

How Can I Implement a Time Limit for a Function Call to Prevent Blocking?

時間制限付き関数実行の実装

コード内で、許容できない期間ブロックされる場合がある外部モジュールからのソケット関連の関数呼び出しが発生しました。この関数呼び出しの実行時間を制限する解決策を探します。実行可能なアプローチには、別のスレッドを利用することが含まれます。

受け入れられた回答の洗練されたバージョンでは、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!")

このコードを組み込むことで、次のことができます。関数呼び出しの時間制限を管理し、タイムアウト例外を効果的に処理します。

以上がブロックを防ぐために関数呼び出しの時間制限を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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