본문 바로가기

app/python

input vs sys.stdin.readline

 

결론 : input()이 syscall에 의해 실행될 때마다 TTY인지 확인하고 sys.stdin.readline()보다 훨씬 느리게 작동

               대략 속도 30배 정도 차이남!!!

빌트인 함수 input과 sys.stdin.readline함수는 정확히 같은 일을 하지 않는다. 어떤 것이 더 빠른지는 수행 중인 작업의 세부 사항에 따라 달라질 수 있다.

 

첫 번째 차이점은 input인터프리터가 대화식으로 실행 중인 경우 표시되는 선택적 프롬프트 매개변수가 있다는 것. 이로 인해 프롬프트가 비어 있더라도(default는 비어있음) 약간의 오버헤드가 발생한다.

 

두번째 차이점은 input은 개행을 제거한다.

 

마지막 차이는 입력의 끝이 표시되는 방식이다. input은 호출할 때 입력이 더이상 없다면 EOF 오류를 발생시킨다. 반면에 sys.stdin.readline은 EOF에서 빈 문자열을 반환하므로 확인해야 한다.

 

sys.stdin.readline() 를 사용한 속도 측정

import sys
input = sys.stdin.readline()
for i in range(int(sys.argv[1])):
		input()

결과는 다음과 같습니다 0.02s.

$ time yes | python3 readline.py 1000000
yes  0.00s user 0.00s system 11% cpu 0.035 total
python3 readline.py 1000000  0.02s user 0.01s system 78% cpu 0.031 total

이번엔 input()을 사용해서 측정합니다.

import sys
for i in range(int(sys.argv[1])):
		input()

readline()로 변경하면 input()약 30배 느려집니다. 결과 : 0.62s

$ time yes | python3 input.py 1000000
yes  0.00s user 0.00s system 0% cpu 0.784 total
python3 input.py 1000000  0.62s user 0.16s system 98% cpu 0.783 total

 

 

참고사항

https://docs.python.org/3/library/sys.html

https://stackoverflow.com/questions/22623528/sys-stdin-readline-and-input-which-one-is-faster-when-reading-lines-of-inpu

 

sys.stdin.readline() and input(): which one is faster when reading lines of input, and why?

I'm trying to decide which one to use when I need to acquire lines of input from STDIN, so I wonder how I need to choose them in different situations. I found a previous post (https://codereview.

stackoverflow.com