Cross platform mutex to prevent script running more than instance?

Thomas Jollans tjol at tjol.eu
Tue Sep 4 04:23:52 EDT 2018


On 09/04/2018 05:35 AM, Cameron Simpson wrote:
> On 03Sep2018 07:45, Malcolm Greene <python at bdurham.com> wrote:
>> Use case: Want to prevent 2+ instances of a script from running ...
>> ideally in a cross platform manner. I've been researching this topic and
>> am surprised how complicated this capability appears to be and how the
>> diverse the solution set is. I've seen solutions ranging from using
>> directories, named temporary files,  named sockets/pipes, etc. Is there
>> any consensus on best practice here?
> 
> I like os.mkdir of a known directory name. This tends to be atomic and 
> forbidden when the name already exists, on all UNIX platforms, over 
> remote filesystems. And, I expect, likewise on Windows.

The trouble with a simple lock file (or directory) is of course that it 
can't recover from the program being killed or from program or system 
crashes without manual intervention. For some use cases that's fine, for 
others it's a problem.

> 
> All the other modes like opening files O_EXCL etc tend to be platform 
> specific and not reliable over network filesystems.
> 
> And pid based approaches don't work cross machine, if that is an issue.

I think a PID file is the traditional approach for *nix daemons, but as 
you say, it does have its own drawbacks.

-- Thomas




More information about the Python-list mailing list