osdir.com


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Cross platform mutex to prevent script running more than instance?


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