7

私のプログラムでは、ファイルが現在存在しない場合、多くのプロセスがファイルを作成しようとする可能性があります。ここで、プロセスの 1 つだけがファイルを作成でき、残りのプロセスが既に作成されている場合は例外が発生するようにしたいと考えています (一種のプロセス セーフおよびスレッド セーフな open() 実装)。Pythonでこれを達成するにはどうすればよいですか。

明確にするために、私が望むのは、ファイルが存在しない場合に作成されることです。ただし、既に存在する場合は、例外をスローします。そして、これはすべてアトミックに行われるべきです。

4

2 に答える 2

10

Python 2.x の場合:

import os

fd = os.open('filename', os.O_CREAT|os.O_EXCL)
with os.fdopen(fd, 'w') as f:
    ....

Python 3.3 以降の場合:

with open('filename', 'x') as f:
    ....
于 2013-07-01T18:18:50.057 に答える
4

Unix ライクなシステムで実行している場合は、次のようにファイルを開きます。

f = os.fdopen(os.open(filename, os.O_CREAT | os.O_WRONLY | os.O_EXCL), 'w')

ファイルがまだ存在しない場合にのみファイルが作成 (および開かれる) されることO_EXCLを保証するフラグ。そうでない場合は、例外が発生します。存在チェックと作成はアトミックに実行されるため、複数のスレッドまたはプロセスが競合してファイルを作成することができ、成功するのは 1 つだけです。os.openOSError

于 2013-07-01T18:17:57.727 に答える