2011-01-06 4 views
3

ここに私の質問:私のウェブサイトが正常に動作しているかどうかを確認するためのスクリプトを書いています。基本的な考え方は5分ごとにサーバーの応答時間などを取得し、サーバーの状態をチェックします。ログをチェックしたり書き込んだりする途中でスクリプトを終了するのは良いことではないと知っていますが、チェックするサーバーがたくさんあり、ファイルI/Oをかなり頻繁にやる必要がある場合はどうなるのでしょうか?あなたが突然スクリプトを閉じたら?ファイルI/O操作中に突然スクリプトを閉じるとどうなりますか?

OK、ここでの例です:

while True: 
    DemoFile = open("DemoFile.txt", "a") 
    DemoFile.write("This is a test!") 
    DemoFile.close() 

    time.sleep(30) 

このラインDemoFile.write("This is a test!")が実行されている間、私は誤ってスクリプトを閉じると、私はDemoFile.txtで何を得るのでしょうか? "This i"(不完全な行)または完全な行または追加されない行?

うまくいけば、誰かが答えを知っていることを望みます。

+0

オペレーティングシステムによって異なります。 – ismail

+0

@ smsmail 'cartman'Dönmez:XPの勝利はどうなりますか? – Shane

+0

試してみるとどうなりましたか? –

答えて

2

python io documentationによれば、バッファリングは、オープン機能に対するバッファリングパラメータに従って処理される。

この場合のデフォルトの動作は、デバイスのブロックサイズか、ブロックサイズを特定できない場合はio.DEFAULT_BUFFER_SIZEのいずれかになります。おそらく4096バイトのようなものでしょう。

つまり、この例では何も書き込まれません。バッファが1回か2回書き込まれているような長さのものを書いていたら、バッファサイズの倍数を書いてください。また、常にflush()でバッファを手動でフラッシュできます。

(あなたがバイナリとして0としてバッファリングとファイルモードを指定した場合、あなたがが。それが唯一の方法だ、「この私」を取得したい)

@svenが指摘したように、Pythonはやっていませんバッファリング。プログラムが終了すると、開いているファイルディスクリプタはすべて閉じられ、オペレーティングシステムによってフラッシュされます。

+0

ファイルが閉じられず、スクリプトの終了時にバッファがフラッシュされませんでしたか?そして、たとえPython 'io'モジュールがバッファリングしていないとしても、オペレーティングシステムはバッファリングしませんか? –

+0

このシナリオをテストするコードを書く方法はありますか? – Shane

+0

まあ、私はそれをテストしたように見えます。私は訂正します。 @sven:ドキュメントによると、osメカニズムだけが使われているようです。オープンパラメータは、基礎となるシステムコールでどの引数が使用されるかを変更するだけです –

関連する問題