지속 시간이 미리 정의된 시간 초과 기능
쉘 스크립팅에서는 과도한 대기를 피하기 위해 장기 실행 작업을 종료하는 메커니즘을 갖는 것이 유용합니다. . 여기서 직면한 과제는 시간 초과 스크립트 내에서 함수를 래핑하여 지정된 시간 제한을 초과하는 경우 False를 반환하는 것입니다.
한 가지 접근 방식은 미리 정의된 간격 후에 False 응답을 트리거하는 비동기 타이머를 설정하는 것입니다. 다행스럽게도 이러한 솔루션은 signal 라이브러리(UNIX 기반 시스템에서 사용 가능)의 신호 처리기를 사용하여 달성할 수 있습니다.
이 프로세스에는 신호를 활용하는 사용자 정의 데코레이터(@timeout)를 만드는 작업이 포함됩니다. Alarm()은 원하는 시간 간격으로 알람을 설정합니다. 장식된 함수 내에서 알람이 만료되면 TimeoutError 예외가 발생하여 작업이 효과적으로 중단됩니다.
이 솔루션을 코드에 통합하려면 다음 코드를 timeout.py로 저장하고 가져오기:
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
이제 애플리케이션 코드 내에서 @timeout 데코레이터를 사용하여 잠재적으로 장기 실행되는 함수에 주석을 답니다. 예:
from timeout import timeout # Short timeout @timeout(5) def slow_function(): # ... # Default timeout @timeout def another_slow_function(): # ... # Customize timeout and error message @timeout(30, error_message="Task timed out") def yet_another_slow_function(): # ...
이 접근 방식을 사용하면 함수가 지정된 시간 초과 간격보다 오래 걸리는 경우 TimeoutError가 발생하고 False를 반환하므로 예상치 못한 지연을 적절하게 처리할 수 있습니다.
위 내용은 미리 정의된 기간을 사용하여 쉘 스크립팅에서 시간 초과 기능을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!