시간 초과된 함수: 실행 시간을 제한하는 방법
셸 스크립트에서는 특정 함수가 끝없이 실행되는 것을 방지하는 것이 도움이 될 수 있습니다. 특히 URL과 같은 원격 리소스에 액세스하는 경우. 시간 초과를 설정하면 서버가 느리거나 응답하지 않아 함수가 스크립트를 정지하지 않도록 할 수 있습니다.
시간 초과를 구현하는 한 가지 방법은 신호 모듈의 시간 초과 데코레이터를 활용하는 것입니다. 신호 문서에 설명된 이 데코레이터는 신호 처리기를 사용하여 경보를 설정합니다. 지정된 시간 간격이 지나면 예외가 발생하여 기능이 효과적으로 중지됩니다.
시간 초과 데코레이터를 사용하려면 timeout.py 모듈에서 이를 가져오고 시간 초과 기간(초)을 인수로 지정합니다. 다음은 기본 시간 제한이 10초이고 사용자 정의 오류 메시지가 있는 데코레이터를 생성하는 예제 스니펫입니다.
import errno import os import signal import functools class TimeoutError(Exception): pass def timeout(seconds=10, error_message=os.strerror(errno.ETIME)): def decorator(func): def _handle_timeout(signum, frame): raise TimeoutError(error_message) @functools.wraps(func) def wrapper(*args, **kwargs): signal.signal(signal.SIGALRM, _handle_timeout) signal.alarm(seconds) try: result = func(*args, **kwargs) finally: signal.alarm(0) return result return wrapper return decorator
데코레이터를 사용하려면 다음과 같이 장기 실행 함수에 적용하기만 하면 됩니다. 예:
# Default timeout of 10 seconds @timeout def long_running_function1(): ... # Timeout of 5 seconds @timeout(5) def long_running_function2(): ... # Timeout of 30 seconds, with custom error message 'Connection timed out' @timeout(30, os.strerror(errno.ETIMEDOUT)) def long_running_function3(): ...
이 구현은 UNIX 시스템에만 적용 가능하다는 점을 기억하세요. 신호 모듈의 데코레이터를 사용하여 시간 초과를 구현함으로써 이제 함수의 실행 기간을 제어하고 함수가 불필요하게 쉘 스크립트를 지연시키는 것을 방지할 수 있습니다.
위 내용은 원격 리소스에 액세스할 때 셸 스크립트 기능이 시간 초과되는 것을 방지하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!