함수 호출의 실행 시간 제한: 심층 분석
장기간 동안 차단되는 소켓 관련 함수 호출을 처리할 때 공통적인 관심사는 발생: 실행 시간을 제한하는 방법. 이러한 기능은 외부 모듈에서 파생되는 경우가 많기 때문에 동작을 직접 제어하는 것이 어려울 수 있습니다.
이 문제를 해결하려면 별도의 스레드를 활용하는 솔루션을 사용하는 것이 좋습니다. 추가 스레드를 도입하면 시간 초과 제한을 정의하고 제한이 초과되면 기능을 종료할 수 있습니다.
스레드 기반 실행 제한을 위한 'signal' 모듈 사용
Python의 '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 중국어 웹사이트의 기타 관련 기사를 참조하세요!