在我的程序中,如果文件当前不存在,许多进程可以尝试创建文件。现在我想确保只有一个进程能够创建文件,如果文件已经创建,其余进程会出现异常(一种进程安全和线程安全的 open() 实现)。我怎样才能在python中实现这一点。
只是为了清楚起见,我想要的是如果文件不存在则创建该文件。但如果它已经存在,则抛出异常。这一切都应该以原子方式发生。
在我的程序中,如果文件当前不存在,许多进程可以尝试创建文件。现在我想确保只有一个进程能够创建文件,如果文件已经创建,其余进程会出现异常(一种进程安全和线程安全的 open() 实现)。我怎样才能在python中实现这一点。
只是为了清楚起见,我想要的是如果文件不存在则创建该文件。但如果它已经存在,则抛出异常。这一切都应该以原子方式发生。
在 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:
....
如果您在类 Unix 系统上运行,请像这样打开文件:
f = os.fdopen(os.open(filename, os.O_CREAT | os.O_WRONLY | os.O_EXCL), 'w')
O_EXCL
标志确保仅在os.open
文件不存在时才创建(和打开)文件,否则OSError
将引发异常。存在检查和创建将自动执行,因此您可以让多个线程或进程竞争创建文件,并且只有一个会成功。