ホームページ >バックエンド開発 >Python チュートリアル >Python でブロッキング関数呼び出しの実行時間を制限するにはどうすればよいですか?

Python でブロッキング関数呼び出しの実行時間を制限するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-24 03:02:12983ブラウズ

How to Limit the Execution Time of a Blocking Function Call in Python?

関数呼び出しの実行時間を制限する

コード内で時折拡張ブロッキングを示すソケット関連の関数呼び出しが発生しました。時には数時間に達することもあります。これは容認できない状況を引き起こします。この問題を軽減するには、コード内で関数の実行時間を制限する解決策を探します。

受け入れられた回答で示唆されているように、別のスレッドを使用すると解決策が得られる可能性があります。ただし、強化されたアプローチは 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 サイトの他の関連記事を参照してください。

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