[python] threading Timer() 타이머 반복 실행

재귀호출 threading.Timer() 반복 실행

파이썬은 인터프리터 언어로써 하나의 메인 쓰레드가 파이썬 코드를 순차적으로 실행하고 종료 됩니다. 주기적으로 실행해야 될 함수가 있을때 threading모듈을 통해 타이머 기능을 사용할 수 있습니다.



🧩1. threading 모듈

코드를 병렬로 실행하기 위해서  threading 모듈로 별도의 쓰레드(Subthread)를 생성합니다.

  • 파이썬에서 쓰레드를 실행하기 위해서는, threading 모듈의 threading.Thread() 함수를 호출하여 Thread 객체를 얻은 후 Thread 객체의 start() 메서드를 호출하게 됩니다.
  • 함수 (혹은 메서드)를 작성하고 그 함수명을 threading.Thread() 함수의 target 아큐먼트에 지정하면 됩니다. 
  • 예를 들어, 아래 예제에서 sum 이라는 함수를 쓰레드가 실행하도록 threading.Thread() 함수의 파라미터로 target=sum 을 지정하였습니다.
  • 한가지 주의할 점은 target=sum() 처럼 지정하면, 이는 sum() 함수를 실행하여 리턴한 결과를 target에 지정하는 것이므로 잘못된 결과를 초래할 수 있습니다. 
  • 만약 쓰레드가 실행하는 함수(혹은 메서드)에 입력 파라미터를 전달해야 한다면, args (혹은 키워드 아규먼트인 경우 kwargs) 에 필요한 파라미터를 지정하면 됩니다. 
  • args는 튜플로 파라미터를 전달하고, kwargs는 dict로 전달한다. 아래 예제에서 sum() 함수는 두 개의 파라미터를 받아들이기 때문에 "args=(1, 100000)" 와 같이 입력파라미터를 지정합니다. 
import threading
 
def sum(low, high):
    total = 0
    for i in range(low, high):
        total += i
    print("Subthread", total)
 
t = threading.Thread(target=sum, args=(1, 100000))
t.start()
 
print("Main Thread")

🧩2. Timer() 함수 사용 

주기적으로 호출할 함수 내에서 자기를 호출합니다.

  • 주기적으로 호출할  startTimer() 함수를 만들고 함수내에서 threading.Timer() 로 함수를 호출합니다.
  • Timer(a,b) 함수는 두 가지 인자를 갖게되는데 a는 반복주기 시간(초)이고, b는 호출할 함수 이름입니다. 
import threading
 
 
def startTimer():
    print("Timer")
    timer = threading.Timer(5, startTimer)
    timer.start()
 
if __name__ == '__main__':
    startTimer()

🧩[참고] time 모듈로 타이머 실행 

threading 모듈은 재귀호출 기능이지만, time 모듈은 시계 기능입니다.

  • time.sleep(초) 함수를 통한 타이머
import time

in_sec = input("시간을 입력하세요.(초):")
sec = int(in_sec)
print(sec)

#while은 반복문으로 sec가 0이 되면 반복을 멈춰라
while (sec != 0 ):
    sec = sec-1
    time.sleep(1)
    print(sec)
  • time.time(초) 함수를 통한 스톱워치 
import time

#타이머 시작점
start = input("Enter를 누르면 타이머를 시작합니다.")
begin = time.time()

#타이머 종료점
stop = input("Enter를 누르면 측정을 종료합니다.")
end = time.time()

#시간차
result = end - begin

#여기서 round는 파이썬에서 소수점 자리수 조절에 활용됩니다.
result = round(result,3)
print("시작 후", result, "초의 시간이 흘렀습니다.")


추가 참고 자료

예제로 배우는 파이썬 프로그래밍 - 쓰레드 를 참조하였습니다.

파이썬 타이머 사용하기 를 참조하였습니다.

[Python] 파이썬으로 타이머 만들기 (Feat. Time 모듈) 을 참조하였습니다.

댓글 쓰기

0 댓글