본문 바로가기

computer/python

초 단위의 디지털 시계를 어떻게 구현할 것인가?

남세동 대표님의 면접 질문 리스트 3번 질문

3. 초단위의 간단한 디지털 시계를 구현한다면 어떻게 할 건가요?

파이썬으로 매 초마다 시간을 출력하는 프로그램을 만들어보자.

import time

while True:
    print(time.localtime())

    time.sleep(1)

a. 그렇게 했을 때 어떤 단점 또는 문제점이 있나요?

이 질문의 핵심은 a번 추가 질문이다.

어떤 방식으로 프로그램을 구현하던지 주어진 요구사항을 제대로 이행했는지를 보장할 수 있냐는 것이다.
위와 코드에 사용한 time.sleep()함수는 시간이 정확히 1초 동안 멈추지 않는다.

운영체제가 제공하는 sleep 함수의 정확도가 파이썬이 사용하는 time.sleep()의 정확도를 결정한다.
stackoverflow에 따르면 stock Windows에서는 최소 10-13ms의 간격이 있다고 한다.

b. 그 점을 해결할 방법으로 어떤 것들이 있을까요?

정확한 디지털 시계를 만들기 위해 오차의 범위가 작은 OS에서 프로그램을 개발하는 방법이있다.
non realtime 리눅스의 경우 1-10ms 사이의 간격이 있어 stock Windows보다 오차를 줄일 수 있지만
오차가 발생하는 시간의 범위는 non-deterministic하다. 다른 프로그램이 작동하는 상황에 따라 줄어들수도 늘어날 수도 있다.

또 다른 방법으로 시간의 오차를 줄일 수 있도록 함수를 개발하는 것이다.
파이썬 3.11에서는 default sleep함수의 오차를 더 줄인 함수를 사용한다.

파이썬에서 오차를 줄이는 코드는 조금 더 고민해보자.

Reference
https://www.youtube.com/watch?v=Js1HSwUurpw
https://stackoverflow.com/questions/1133857/how-accurate-is-pythons-time-sleep

'computer > python' 카테고리의 다른 글

클래스, class - 1  (0) 2022.11.05
데이터 타입, type  (0) 2022.08.24
함수, function  (0) 2022.08.05
print 함수  (0) 2022.08.03
어느 환경에서 파이썬을 시작해야 할까?  (0) 2022.07.25