在我的程序中,如果文件当前不存在,则许多进程都可以尝试创建该文件。现在我想确保只有一个进程能够创建该文件,而其余进程如果文件已被创建则会得到一个异常(一种进程安全和线程安全的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')
< p > os.open
的标志 O_EXCL
确保文件只有在不存在时才会创建(和打开),否则将引发一个 OSError
异常。检查文件是否存在和创建将原子地执行,因此您可以有多个线程或进程争夺创建文件,仅有一个将成功。
open(..., 'x')
没有任何availability
信息;这通常意味着它支持所有平台。而Python 2.x的文档os.fdopen
则提到了可用性:Unix、Windows。 - falsetru