260
  1. Python はどのくらいの頻度でファイルにフラッシュしますか?
  2. Python はどのくらいの頻度で標準出力にフラッシュしますか?

(1)についてはわかりません。

(2) に関しては、Python は改行ごとに stdout にフラッシュすると思います。しかし、stdout をファイルにオーバーロードすると、頻繁にフラッシュされますか?

4

5 に答える 5

379

ファイル操作の場合、特に設定しない限り、Python はオペレーティング システムのデフォルトのバッファリングを使用します。バッファー サイズ、バッファーなし、またはライン バッファーを指定できます。

たとえば、関数 open はバッファ サイズの引数を取ります。

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

"オプションの buffering 引数は、ファイルの望ましいバッファ サイズを指定します:"

  • 0 はバッファなしを意味し、
  • 1 はバッファリングされた行を意味し、
  • その他の正の値は、(ほぼ) そのサイズのバッファーを使用することを意味します。
  • ネガティブ バッファリングとは、システムのデフォルトを使用することを意味します。これは通常、tty デバイス用にライン バッファリングされ、他のファイル用に完全にバッファリングされます。
  • 省略した場合、システムのデフォルトが使用されます。

コード:

bufsize = 0
f = open('file.txt', 'w', buffering=bufsize)
于 2010-07-02T19:02:27.103 に答える
194

メソッドを使用して、プログラムでバッファをファイルに強制的にフラッシュすることもできますflush()

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()

で出力ファイルをテーリングするときにこれが役立つことがわかりましたtail -f

于 2011-03-10T05:13:15.437 に答える
14

これがpythonにも当てはまるかどうかはわかりませんが、実行しているオペレーティングシステムに依存すると思います。

たとえば 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()
于 2010-07-02T16:37:16.757 に答える
13

io モジュールから読み取り専用の DEFAULT_BUFFER_SIZE 属性を呼び出して、デフォルトのバッファ サイズを確認することもできます。

import io
print (io.DEFAULT_BUFFER_SIZE)
于 2016-05-20T15:28:11.157 に答える