2

私はapache2にWSGIアプリケーションを持っています。これは、最も簡単な方法でログファイルに書き込みます。

def log (msg):
    with open (LOGFILE, 'a') as f: f.write (msg)

私のサンドボックス環境では正常に動作しますが、並行性については少し心配しています。apache2がさまざまなスレッドを実行している場合、同時実行の問題を恐れる必要がありますか?ログファイルがスクランブルされる可能性がありますか?log (msg)別のスレッドがすでにログに記録されている場合、おそらく呼び出しは失敗しますか?もしそうなら、どうすればそれを防ぐことができますか?

編集: テストのために、2つのシェルから同時に2つのスクリプトを実行します。

#! /usr/bin/python3.2

def log ():
    with open ('log', 'a') as f:
        f.write ('message from thread A\n')

while (True): log ()

#! /usr/bin/python3.2

def log ():
    with open ('log', 'a') as f:
        f.write ('message from thread B\n')

while (True): log ()

ログファイルは良好に見え、エラーは発生していません。私は幸運でしたか、それとも2つの異なるスレッドから同じファイルに書き込むのが安全でしたか。ファイルシステムはext4です。

4

2 に答える 2

4

Pythonロギングモジュールを使用できます

于 2012-12-16T01:05:07.957 に答える
0

Linux OSでは、追加モードでのファイルの書き込みがアトミックであることが保証されているため、エラーは発生しませんでした。

于 2013-10-09T11:49:19.177 に答える