関数呼び出しの実行時間の制限: より詳細な説明
ソケット関連の関数呼び出しが長期間ブロックされることに対処する場合、一般的な懸念事項となります。実行時間を制限する方法が問題になります。これらの関数は外部モジュールから派生することが多いため、その動作を直接制御することは困難を引き起こす可能性があります。
この問題に対処するには、別のスレッドを利用するソリューションをお勧めします。追加のスレッドを導入すると、タイムアウト制限を定義し、制限を超えた場合に関数を終了できます。
スレッドベースの実行制限に「signal」モジュールを使用する
Python の「signal」モジュールは、実行時間制限を実装するための効果的なアプローチを提供します。これにより、制限時間に達したときの終了シグナルなどのシグナルをスレッドに送信できます。
「signal」モジュールの使用方法を示す例は次のとおりです。
import signal import threading # Define our target function that may potentially block def long_function_call(): while True: # Some operations that may consume a lot of time pass # Define a function to handle the timeout signal def signal_handler(signum, frame): raise TimeoutException("Timed out!") # Create a thread that will execute the function thread = threading.Thread(target=long_function_call) # Register the signal handler to the thread signal.signal(signal.SIGALRM, signal_handler) # Set a timeout limit (in seconds) signal.alarm(10) # Start the thread thread.start() # Wait for the thread to complete or time out thread.join() # Handle the timeout exception, if any if thread.is_alive(): print("Timed out!")
このアプローチ別のスレッドを使用して、ターゲット関数の実行中にメインスレッドがブロックされないようにします。 「signal」モジュールは、指定された制限時間が経過したときに関数を終了するメカニズムを提供します。
以上がPython でブロッキングソケット関数呼び出しの実行時間を制限するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。