반복 타이머를 사용한 스레딩
'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 중국어 웹사이트의 기타 관련 기사를 참조하세요!