source

python은 파일에 얼마나 자주 플러시됩니까?

factcode 2022. 9. 12. 11:33
반응형

python은 파일에 얼마나 자주 플러시됩니까?

  1. Python은 파일에 얼마나 자주 플러시됩니까?
  2. Python은 얼마나 자주 stdout에 플러시됩니까?

나는 (1)에 대해 확신이 없다.

(2)에 대해서는, Python은 새로운 행이 나올 때마다 stdout에 플러시한다고 생각합니다.그러나 stdout을 파일에 오버로드하면 파일이 자주 플러시됩니까?

파일 작업의 경우 Python은 별도로 구성하지 않는 한 운영 체제의 기본 버퍼링을 사용합니다.버퍼 크기, 비버퍼 또는 라인 버퍼링을 지정할 수 있습니다.

예를 들어 open 함수는 buffer size 인수를 사용합니다.

http://docs.python.org/library/functions.html#open

"선택적인 버퍼링 인수는 파일의 원하는 버퍼 크기를 지정합니다."

  • 0은 버퍼가 없는 것을 의미합니다.
  • 1은 회선이 버퍼링된 것을 의미합니다.
  • 기타 양의 값은 (약) 그 크기의 버퍼를 사용하는 것을 의미합니다.
  • 네거티브 버퍼링이란 시스템디폴트를 사용하는 것을 의미합니다.시스템 디폴트는 보통 tty 디바이스용으로 라인 버퍼링되고 다른 파일용으로 풀 버퍼링됩니다.
  • 생략할 경우 시스템 기본값이 사용됩니다.

코드:

bufsize = 0
f = open('file.txt', 'w', buffering=bufsize)

메소드를 사용하여 버퍼를 강제로 파일에 프로그래밍 방식으로 플러시할 수도 있습니다.

with open('out.log', 'w+') as f:
    f.write('output is ')
    # some work
    s = 'OK.'
    f.write(s)
    f.write('\n')
    f.flush()
    # some other work
    f.write('done\n')
    f.flush()

이것은 출력 파일을 tailing 할 때 도움이 됩니다.tail -f.

python에도 적용되는지는 모르겠지만, 사용하고 있는 operating system에 따라 다르다고 생각합니다.

예를 들어 Linux 에서는 단말기로의 출력은 새로운 행으로 버퍼를 플러시하지만 파일로의 출력은 버퍼가 가득 찼을 때만 플러시됩니다(디폴트).이는 버퍼의 플래시 횟수를 줄이는 것이 효율적이며 파일 내의 새 행에 출력이 플래시되지 않으면 사용자가 알아차릴 가능성이 낮기 때문입니다.

필요한 경우 출력을 자동 플러시할 수 있습니다.

편집: 이 방법으로 python으로 자동 플러시 할 수 있을 것 같습니다(여기서 참조).

#0 means there is no buffer, so all output
#will be auto-flushed
fsock = open('out.log', 'w', 0)
sys.stdout = fsock
#do whatever
fsock.close()

io 모듈에서 읽기 전용 DEFAULT_BUFFER_SIZE 속성을 호출하여 기본 버퍼 크기를 확인할 수도 있습니다.

import io
print (io.DEFAULT_BUFFER_SIZE)

다음은 OP가 원하는 방법을 선택할 수 있는 또 다른 방법입니다.

아래 코드를 포함할 때__init__.py 파일은 다른 코드보다 먼저 출력됩니다.print에러는 Ableton's Log.txt에 기록되지 않고 디스크상의 파일을 분리할 수 있습니다.

import sys

path = "/Users/#username#"

errorLog = open(path + "/stderr.txt", "w", 1)
errorLog.write("---Starting Error Log---\n")
sys.stderr = errorLog
stdoutLog = open(path + "/stdout.txt", "w", 1)
stdoutLog.write("---Starting Standard Out Log---\n")
sys.stdout = stdoutLog

(Mac))#username#사용자 폴더 이름으로 이동합니다.Windows 、 windows windows windows 、 windows windows windows릅릅 windows windows windows windows windows windows windows windows windows ) 。

디스크의 파일이 변경될 때 내용을 새로 고치는 텍스트 편집기에서 파일을 열면(예: Mac의 경우 TextEdit은 그렇지 않지만 TextWrangler는 그렇지 않음), 실시간으로 업데이트되는 로그를 볼 수 있습니다.

크레딧: 이 코드는 대부분 Nathan Ramella에 의해 라이브 API 컨트롤 서페이스 스크립트에서 복사되었습니다.

언급URL : https://stackoverflow.com/questions/3167494/how-often-does-python-flush-to-a-file

반응형