Python 스레딩 모듈의 타이머 클래스

Vaibhav Vaibhav 2022년1월23일
Python 스레딩 모듈의 타이머 클래스

스레딩은 병렬 처리를 달성하기 위해 여러 스레드를 동시에 실행하는 기술입니다. Python에서는 threading 모듈을 사용하여 스레딩을 구현할 수 있습니다. 이제 threading 모듈에는 Timer 클래스가 있습니다. 이 클래스는 x 시간 후에 일부 작업을 수행하거나 일부 코드를 실행하는 데 사용할 수 있습니다. 이 기사에서는 이 클래스를 어떻게 사용하고 예제를 통해 더 잘 이해할 수 있는지 알아보겠습니다. 우리는 무한 타이머를 만들 것입니다.

Python의 threading.Timer 클래스

Timer 클래스는 Thread 클래스의 하위 클래스이며 일정 시간 후에 코드를 실행하는 데 사용할 수 있습니다. 두 개의 인수, 즉 intervalfunction을 허용합니다. 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 클래스를 사용합니다. 두 개의 인수 thFunction을 수락합니다. 이 인수는 Timer 개체에 대한 초 수와 콜백 기능을 나타냅니다. MyInfiniteTimer 클래스 객체가 생성되면 클래스의 생성자가 새 타이머 객체를 생성하지만 시작하지는 않습니다. 타이머는 MyInfiniteTimer 클래스의 start() 메서드를 사용하여 시작할 수 있습니다. 그리고 stop() 메서드를 사용하여 타이머를 중지할 수 있습니다. 현재 타이머가 종료되면 핸들러 또는 handle_function()은 이전 타이머와 동일한 구성으로 새 타이머를 생성하고 시작합니다.

MyInfiniteTimer 클래스의 작동을 보여주기 위해 먼저 29 라인에 새로운 MyInfiniteTimer 클래스 개체를 만든 다음 start() 메서드를 호출했습니다. 다음으로 5초 동안 기다리거나 타이머가 5초 동안 실행되도록 했습니다. 그런 다음 타이머를 중지하고 다시 5초 동안 기다립니다. 마지막으로 마지막 두 과정을 반복한 후 프로그램을 종료했습니다.

Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.

관련 문장 - Python Threading