티스토리 뷰
보통 코딩테스트를 풀때 sys.stdout.write
가 print
보다 속도가 빠른 이유로 쓰는 경우가 있습니다.
하지만 sys.stdout.write
를 쓸 때 주의해야할 점이 있습니다.
import time
import sys
for i in range(10):
sys.stdout.write(str(i))
time.sleep(1)
위와 같은 코드를 실행할 때 어떻게 출력이 될거 같으신가요?
1초마다 0, 1, 2, 3 .. 순서대로 출력이 될 거 같습니다.
하지만 출력해보면 10초 후 0,1,2,3.. 이 한꺼번에 출력됨을 볼 수 있습니다.
위 현상을 해결하려면
sys.stdout.write
를 호출 한 후 바로 sys.stdout.flush()
를 호출해주거나
print
로 변경하면 됩니다. print
는 내부에서 sys.stdout.write
를 호출 한 후 바로 sys.stdout.flush()
를 호출해줍니다.
import time
import sys
for i in range(10):
sys.stdout.write(str(i))
# sys.stdout.flush()
# or print(i)
time.sleep(1)
이러한 현상이 일어나는 이유는
sys.stdout.write('1')을 호출하면 '1'을 바로 호출하는것이 아니라 '1' 을 buffer에 저장하고, sys.stdout.flush() 가 일어날때 화면에 출력하게 됩니다.
flush
가 일어나기전에는 계속 buffer
에 남아있는것 입니다.
sys.stdout.flush()
는 기본적으로 프로그램이 종료될 때 또한 호출되기 때문에 간단한 프로그램에서는 느낄 수 없었지만 프로그램이 끝나지 않고 계속 도는경우 이러한 현상때문에 문제가 발생할 수도 있을거 같습니다.
https://brunch.co.kr/@sinclairo/12
https://stackoverflow.com/questions/10019456/usage-of-sys-stdout-flush-method
'LANGUAGE > python' 카테고리의 다른 글
[Python] 가비지 컬렉션 (0) | 2022.08.14 |
---|---|
[Python] for-else 문 (0) | 2022.06.12 |
[python] class (0) | 2021.12.29 |
둘 이상의 인수가 있는 python map 함수 (0) | 2021.09.01 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- leetcode
- django
- stdout
- for-else
- go context
- 백준
- 소프트웨어 장인
- Python
- 팰린드롬수
- Two Scoops of Django
- 프로그래머스
- 방금그곡
- 파이썬
- 독후감
- dfs
- go
- gunicorn
- taggit
- query
- 문자열 뒤집기
- conTeXt
- ManyToMany
- sql lite
- 의대 신경학 강의
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함