복붙노트

[PYTHON] 파이썬에서 함수를 타임 아웃하는 방법, 타임 아웃이 1 초 미만입니다.

PYTHON

파이썬에서 함수를 타임 아웃하는 방법, 타임 아웃이 1 초 미만입니다.

내가 정말 많은 양의 로그 파일을 검색하고 있는데 re.match () 함수를 사용하여 저장 한 정규 표현식 (RegExses)에 그룹에 해당 행을 분배하고있다. 불행히도 내 RegExses 중 일부는 너무 복잡하고 파이썬은 때로는 지옥을 되돌릴 수 없습니다. 이 때문에 나는 어떤 종류의 타임 아웃으로 그것을 보호 할 필요가있다.

나는 오늘 아침이 문제에 대한 해결책을 찾고자했지만 나는 만족스러운 답을 찾지 못했다.

해결법

  1. ==============================

    1.해결책:

    해결책:

    결국, 그 해결책은 그렇게 복잡하지는 않았지만, 나는 희망없는 누적 된 사람들이이 간단한 해결책을 여기에 게시하는 것이 유용 할 것이라고 생각했습니다.

    나는 여기에 게시 된 약간 수정 된 스크립트를 가지고있다 : 끝내기에는 너무 오래 걸리는 경우 타임 아웃 기능.

    그리고 여기 코드가 있습니다 :

    from functools import wraps
    import errno
    import os
    import signal
    
    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)
    
            def wrapper(*args, **kwargs):
                signal.signal(signal.SIGALRM, _handle_timeout)
                signal.setitimer(signal.ITIMER_REAL,seconds) #used timer instead of alarm
                try:
                    result = func(*args, **kwargs)
                finally:
                    signal.alarm(0)
                return result
            return wraps(func)(wrapper)
        return decorator
    

    그리고 다음과 같이 사용할 수 있습니다.

    from timeout import timeout 
    from time import time
    
    @timeout(0.01)
    def loop():
        while True:
           pass
    try:
        begin = time.time()
        loop()
    except TimeoutError, e:
        print "Time elapsed: {:.3f}s".format(time.time() - begin)
    

    어떤 지문

    Time elapsed: 0.010s
    

    나는 이것이 누군가에게 도움이되기를 바랍니다 :-)

  2. from https://stackoverflow.com/questions/11901328/how-to-timeout-function-in-python-timeout-less-than-a-second by cc-by-sa and MIT license