[Python-ideas] Add create mode to open()

Antoine Pitrou solipsis at pitrou.net
Wed Aug 17 11:58:23 CEST 2011


Le mercredi 17 août 2011 à 11:52 +0200, M.-A. Lemburg a écrit :
> Antoine Pitrou wrote:
> > On Wed, 17 Aug 2011 14:11:32 +1000
> > Nick Coghlan <ncoghlan at gmail.com> wrote:
> >> On Wed, Aug 17, 2011 at 1:43 PM, Devin Jeanpierre
> >> <jeanpierreda at gmail.com> wrote:
> >>> I'd also point out that for those that don't want race conditions,
> >>> Python is discouraging. The correct incantation involves two
> >>> undocumented constants, plus a unique and rarely used way of opening
> >>> files that involves unix file descriptors.
> >>
> >> FWIW, when you control the filename, you can include an additional
> >> subdirectory precisely for the exception when a second process
> >> attempts to create the same subdirectory.
> > 
> > How do you create a directory and a file atomically?
> 
> On Windows, directories are created atomically. On Unix,
> too, but symlinks are faster. You can use those to implement
> cooperative file locks in a fairly cross-platform way.

I was thinking of creating both the directory and the file in a single
atomic operation. But if the directory is only ever used for that file,
I guess it's ok.
(there's still a problem when deleting the directory and the file, which
can't be atomic, and the file has to be deleted before the directory,
meaning if the process crashes in between, there are "legitimate"
situations where the directory exists but not the file in it...)

Regards

Antoine.





More information about the Python-ideas mailing list