[파이썬] 0.01초 단위로 표현되는 시계를 만들고 싶은데 시간이 느립니다. ㅠㅠ


안녕하세요. 파이썬을 공부하고 있는 학생입니다. 제가 시계를 만들어서 cmd 창에서 실행하려고 프로그램을 만들었습니다. 시간은 '02:03:12.23'과 같이 0.01초 단위로 표현되게 만들었습니다.

class Timer:

    def __init__(self):
        self._hour = 0
        self._minute = 0
        self._second = 0
        self._hundi_second = 0

    def run(self):
        while self._hour < 3:
            the_time = "{:02}".format(self._hour)+":"+ "{:02}".format(self._minute) \
+":"+ "{:02}".format(self._second) +"."+ "{:02}".format(self._hundi_second)
            print(the_time+'\r', end="")

            self._hundi_second += 1

            if self._hundi_second == 100:
                self._second += 1
                self._hundi_second = 0
            if self._second == 60:
                self._minute += 1
                self._second = 0
            if self._minute == 60:
                self._hour += 1
                self._minute = 0

            time.sleep(0.01)

            print("3시간이 되어 프로그램을 종료합니다. 감사합니다.")

if __name__ == "__main__":
    new = Timer()
    new.run()

돌아가기는 해서 참 좋았습니다만.. 기쁨도 잠시.. 조금 느린 것 같더라구요 ㅠㅠ 시간을 폰으로 같이 재니까 30초 기준 약 10초 가까이 느린 것을 확인했습니다. 생각해보면, 계산 과정이 들어가서 그런 것 같은데요. 제가 원하는 대로 구현하려면 어떤 방법을 써야할까요?? 조언 부탁드립니다. (^)


조회수 248


1 답변


좋아요
1
싫어요
채택취소하기

이건 어떨까요? 저도 코딩을 잘하지는 못해서 대충만들어본건데... 아 python 2.x기준입니다!

저도 처음에는

print "{:02}:{:02}:{:02}.{:02}".format(self._hour, self._minute, self._second, self._hundi_second)

식으로 해보려고했는데 말씀하신 것처럼 조금 느려지더라구요.... 그래서 아래처럼 해보았습니다!

import time
import datetime
import os

def cls():
    os.system('cls' if os.name == 'nt' else 'clear')

default = time.time()
while True:
    ts = time.time() - default + 3600*15
    st = datetime.datetime.fromtimestamp(ts).strftime("%H:%M:%S.%f")
    cls()
    print st

화면에 시간을 출력 후 화면을 지운 후 다시 출력시키기 위해 cls()를 추가했구요,

time.time()가 현재 표준시간을 받아와서, 시작시점의 시간을 빼서 00:00:00.00부터 시작하게 하려고 했는데 출력이 09:00:00.00부터 시작되길래 00을 맞춰주기위해 3600*15를 추가했습니다!

그런데 마이크로초가 6자리가 출력되어요! 슬라이싱해주시면 될 것 같습니다

while True:
    ts = time.time() - default + 3600*15
    st = datetime.datetime.fromtimestamp(ts).strftime("%H:%M:%S.%f")
    st = st[0:-4]
    cls()
    print st

이런식으로 하시면 00:00:00.00식으로 출력됩니다! -3으로하시면 00:00:00.000이구요


  • 감사합니다. 만들어서 시간이 얼마나 차이가 나는지 확인해보겠습니다. :)    Sunghwan Park   2016.8.25 15:31     
  • 질문있습니다. 왜 09:00:00.0부터 시작할까요? 이해가 잘 되지 않네요... 꼭 확인 부탁드립니다!! ㅠㅠ    Sunghwan Park   2016.8.25 19:48     
  • 답변 늦어 죄송합니다. 자주 들어오지 않다보니... 그게 정확히따지면 그냥 9시가 아니라 1970년 01월 01일 09시인데, datetime.datetime.fromtimestamp()에서 인자로 0을 넘겨주었을 때 '0'에 해당하는 시점이 그 순간이더라구요. 음수를 넣으면 에러나구요. 아마 그 지점이 해당 기능으로 표현할 수 있는 최소 지점이라고 생각합니다.    갈아만든공돌이   2016.8.29 16:43     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close