> 백엔드 개발 > 파이썬 튜토리얼 > 원격 리소스에 액세스할 때 셸 스크립트 기능이 시간 초과되는 것을 방지하려면 어떻게 해야 합니까?

원격 리소스에 액세스할 때 셸 스크립트 기능이 시간 초과되는 것을 방지하려면 어떻게 해야 합니까?

Patricia Arquette
풀어 주다: 2024-11-30 13:02:19
원래의
249명이 탐색했습니다.

How Can I Prevent Shell Script Functions from Timing Out When Accessing Remote Resources?

시간 초과된 함수: 실행 시간을 제한하는 방법

셸 스크립트에서는 특정 함수가 끝없이 실행되는 것을 방지하는 것이 도움이 될 수 있습니다. 특히 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿