>백엔드 개발 >파이썬 튜토리얼 >장기 실행 쉘 스크립트 기능에 대한 시간 초과를 어떻게 구현할 수 있습니까?

장기 실행 쉘 스크립트 기능에 대한 시간 초과를 어떻게 구현할 수 있습니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-03 18:20:11877검색

How Can I Implement Timeouts for Long-Running Shell Script Functions?

장시간 쉘 스크립트 함수에 대한 시간 초과 구현

쉘 스크립팅에서 특정 기능을 실행하는 데 과도한 시간이 걸려 지연이 발생하는 상황이 발생할 수 있습니다. 아니면 무한 루프일 수도 있습니다. 이를 방지하기 위해 지정된 시간 내에 완료되지 않는 경우 해당 기능을 종료하는 시간 초과를 구현하는 것이 일반적입니다.

한 가지 효과적인 접근 방식은 비동기 타이머를 사용하여 시간 초과를 적용하는 것입니다. 타이머를 설정하면 지정된 기간을 초과하는 경우 함수를 종료하여 스크립트가 의도한 대로 계속 실행되도록 할 수 있습니다.

이를 구현하려면 Python에서 제공하는 신호 모듈을 활용할 수 있습니다. 함수를 래핑하기 위해 타임아웃 데코레이터를 정의하는 방법은 다음과 같습니다.

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

타임아웃 데코레이터가 있으면 설정된 타임아웃 후에 종료하려는 모든 함수에 이를 적용할 수 있습니다. 예를 들어, 10초 후 타임아웃을 원하는 long_running_function이라는 함수가 있다면 다음과 같이 꾸밀 수 있습니다.

from timeout import timeout

@timeout
def long_running_function():
    ...

타임아웃 데코레이터를 사용하면 쉘 스크립트 함수가 타임아웃되는 것을 효과적으로 방지할 수 있습니다. 장기간의 실행으로 인해 무기한 중단되었습니다. 이 접근 방식을 사용하면 불필요한 지연이나 중단 없이 스크립트가 계속 실행됩니다.

위 내용은 장기 실행 쉘 스크립트 기능에 대한 시간 초과를 어떻게 구현할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.