>  기사  >  백엔드 개발  >  `threading.Timer`가 반복적으로 시작되면 `RuntimeError`가 발생하는 이유는 무엇입니까?

`threading.Timer`가 반복적으로 시작되면 `RuntimeError`가 발생하는 이유는 무엇입니까?

DDD
DDD원래의
2024-11-10 17:20:03280검색

Why Does `threading.Timer` Raise a `RuntimeError` When Repeatedly Started?

반복 타이머를 사용한 스레딩

'n'초마다 주기적으로 함수를 실행하기 위해 Python threading.Timer 클래스가 실용적인 솔루션을 제공합니다. . 하지만 타이머를 반복적으로 시작, 중지, 재설정해야 하는 경우에는 이 타이머를 사용하는 것이 까다로울 수 있습니다.

0.5초마다 함수를 실행한다고 가정해 보겠습니다. 다음을 시도해 볼 수 있습니다.

import threading

def function_to_execute():
    # Your function code here

t = threading.Timer(0.5, function_to_execute)

while True:
    t.cancel()
    t.start()

그러나 이 코드는 스레드를 두 번 이상 시작하는 것에 대해 불평하는 RuntimeError를 발생시킵니다. 왜 그럴까요?

기본적으로 타이머 스레드의 start() 메서드는 한 번만 호출할 수 있습니다. 하지만 타이머를 반복적으로 취소하고 다시 시작하므로 이 문제가 발생합니다.

재사용 가능한 타이머 스레드 만들기

이러한 제한을 극복하려면 더 나은 접근 방식은 다음과 같습니다. 타이머 스레드를 한 번만 시작합니다. 스레드 내에서 반복 함수 실행을 구현합니다.

import threading

class MyThread(threading.Thread):
    def __init__(self, event):
        threading.Thread.__init__(self)
        self.stopped = event

    def run(self):
        while not self.stopped.wait(0.5):
            # Execute your function here

# Create a stop event
stopFlag = threading.Event()

# Start the timer thread
thread = MyThread(stopFlag)
thread.start()

이 설정을 사용하면 타이머 스레드가 0.5초마다 함수를 계속 실행합니다. 타이머를 중지하려면 stopFlag 이벤트를 설정하기만 하면 됩니다.

# Stop the timer
stopFlag.set()

이 방법을 사용하면 RuntimeError가 발생하지 않고 필요에 따라 타이머를 반복적으로 시작, 중지 및 재설정할 수 있습니다.

위 내용은 `threading.Timer`가 반복적으로 시작되면 `RuntimeError`가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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