>백엔드 개발 >파이썬 튜토리얼 >장기 실행 프로세스를 방지하기 위해 시간 초과 기능을 구현하는 방법은 무엇입니까?

장기 실행 프로세스를 방지하기 위해 시간 초과 기능을 구현하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-30 08:55:15954검색

How to Implement a Timeout Function to Prevent Long-Running Processes?

종료 시간이 너무 오래 걸리는 경우 타임아웃 기능

특정 기능을 완료하는 데 시간이 너무 오래 걸리는 상황을 방지하려면 시간 초과 메커니즘을 구현할 수 있습니다. 여기에는 미리 결정된 시간이 지나면 예외를 발생시키는 신호 처리기를 사용하여 경보를 설정하는 작업이 포함됩니다. 이 방법은 UNIX 환경에 특히 유용합니다.

이 메커니즘을 활용하는 방법은 다음과 같습니다.

  1. 데코레이터 만들기:
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
  1. 적용 데코레이터:
from timeout import timeout

# Timeout a long running function with the default expiry of 10 seconds.
@timeout
def long_running_function():
    ...

# Timeout after 5 seconds
@timeout(5)
def another_long_running_function():
    ...

이렇게 하면 @timeout으로 장식된 모든 기능이 지정된 시간 초과 기간을 초과하는 경우 중단됩니다.

위 내용은 장기 실행 프로세스를 방지하기 위해 시간 초과 기능을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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