7

在我的程序中,如果文件当前不存在,许多进程可以尝试创建文件。现在我想确保只有一个进程能够创建文件,如果文件已经创建,其余进程会出现异常(一种进程安全和线程安全的 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标志确保仅在os.open文件不存在时才创建(和打开)文件,否则OSError将引发异常。存在检查和创建将自动执行,因此您可以让多个线程或进程竞争创建文件,并且只有一个会成功。

于 2013-07-01T18:17:57.727 回答