Python 스레딩 모듈의 타이머 클래스
스레딩은 병렬 처리를 달성하기 위해 여러 스레드를 동시에 실행하는 기술입니다. Python에서는 threading
모듈을 사용하여 스레딩을 구현할 수 있습니다. 이제 threading
모듈에는 Timer
클래스가 있습니다. 이 클래스는 x
시간 후에 일부 작업을 수행하거나 일부 코드를 실행하는 데 사용할 수 있습니다. 이 기사에서는 이 클래스를 어떻게 사용하고 예제를 통해 더 잘 이해할 수 있는지 알아보겠습니다. 우리는 무한 타이머를 만들 것입니다.
Python의 threading.Timer
클래스
Timer
클래스는 Thread
클래스의 하위 클래스이며 일정 시간 후에 코드를 실행하는 데 사용할 수 있습니다. 두 개의 인수, 즉 interval
및 function
을 허용합니다. interval
은 코드가 실행되어야 하는 시간(초)을 나타내며 function
은 필요한 시간이 경과했을 때 호출되어야 하는 콜백 함수입니다. 이 클래스에는 start()
및 cancel()
이라는 두 가지 중요한 기능이 있습니다. start()
메소드는 타이머를 시작하는 데 사용되며 cancel()
메소드는 타이머를 취소하는 데 사용됩니다.
타이머 개체는 기본적으로 시작되지 않습니다. 그것들을 시작하려면 start()
메소드를 호출해야 합니다. 그리고 실행 중인 타이머를 중지하려면 cancel()
메서드를 사용할 수 있습니다.
이제 이론을 마쳤으므로 이 클래스를 사용하여 무한 타이머를 만드는 방법을 실제로 이해해 보겠습니다. 동일한 내용은 다음 코드를 참조하십시오.
from time import sleep
from threading import Timer
from datetime import datetime
class MyInfiniteTimer:
"""
A Thread that executes infinitely
"""
def __init__(self, t, hFunction):
self.t = t
self.hFunction = hFunction
self.thread = Timer(self.t, self.handle_function)
def handle_function(self):
self.hFunction()
self.thread = Timer(self.t, self.handle_function)
self.thread.start()
def start(self):
self.thread = Timer(self.t, self.handle_function)
self.thread.start()
def cancel(self):
self.thread.cancel()
def print_current_datetime():
print(datetime.today())
t = MyInfiniteTimer(1, print_current_datetime)
t.start()
sleep(5)
t.cancel()
sleep(5)
t.start()
sleep(5)
t.cancel()
출력:
2021-10-31 05:51:20.754663
2021-10-31 05:51:21.755083
2021-10-31 05:51:22.755459
2021-10-31 05:51:23.755838
2021-10-31 05:51:24.756172
2021-10-31 05:51:30.764942
2021-10-31 05:51:31.765281
2021-10-31 05:51:32.765605
2021-10-31 05:51:33.766017
2021-10-31 05:51:34.766357
보시다시피 MyInfiniteTimer
클래스는 Timer
클래스를 사용합니다. 두 개의 인수 t
및 hFunction
을 수락합니다. 이 인수는 Timer
개체에 대한 초 수와 콜백 기능을 나타냅니다. MyInfiniteTimer
클래스 객체가 생성되면 클래스의 생성자가 새 타이머 객체를 생성하지만 시작하지는 않습니다. 타이머는 MyInfiniteTimer
클래스의 start()
메서드를 사용하여 시작할 수 있습니다. 그리고 stop()
메서드를 사용하여 타이머를 중지할 수 있습니다. 현재 타이머가 종료되면 핸들러 또는 handle_function()
은 이전 타이머와 동일한 구성으로 새 타이머를 생성하고 시작합니다.
MyInfiniteTimer
클래스의 작동을 보여주기 위해 먼저 29
라인에 새로운 MyInfiniteTimer
클래스 개체를 만든 다음 start()
메서드를 호출했습니다. 다음으로 5
초 동안 기다리거나 타이머가 5
초 동안 실행되도록 했습니다. 그런 다음 타이머를 중지하고 다시 5
초 동안 기다립니다. 마지막으로 마지막 두 과정을 반복한 후 프로그램을 종료했습니다.