출력 버퍼링를 해제하고 싶습니다

조회수 1658회

sys.stdout이 디폴트로 buffering을 하고 있어 멀티 쓰레딩할때 이상하게 돌아가는데 버퍼링을 해제시키려면 어떻게 해야 하나요?

1 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    1. 커맨드 라인에서 설정하는 방법

    파이썬 스크립트를 실행할 때 python -u <file> 과 같이 실행


    2. 환경변수로 설정하는 방법

    환경 변수 PYTHONUNBUFFERED를 설정하면 버퍼링 되는 걸 막을 수 있습니다.

    import os
    os.environ('PYTHONUNBUFFERED') = '1'
    

    3. stdout 할 때 마다 flush 해주는 객체 생성

    write 할 때 마다 flush 해주는 클래스를 만들어서 sys.stdout를 이 객체로 대체하는 방법입니다.

    class Unbuffered(object):
       def __init__(self, stream):
           self.stream = stream
       def write(self, data):
           self.stream.write(data)
           self.stream.flush()
       def __getattr__(self, attr):
           return getattr(self.stream, attr)
    
    import sys
    sys.stdout = Unbuffered(sys.stdout)
    print 'Hello'
    

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.