초 단위의 디지털 시계를 어떻게 구현할 것인가?
남세동 대표님의 면접 질문 리스트 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