Cross platform mutex to prevent script running more than instance?

D'Arcy Cain darcy at VybeNetworks.com
Sun Sep 2 20:15:16 EDT 2018


On 09/03/18 09:45, Malcolm Greene 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?

Here's my simple method which works in pure Python so I guess that makes it
cross-platform. Well, as long as it has process IDs anyway. There's a small
window between reading the file and writing the new one but for most purposes
that should be OK. If you have to worry about those nano-second situations you
 will need to use one of those more complicated methods.
import os, sys
def ok2run(lockfile):
 mypid = os.getpid()
 try: pid = int(open(lockfile).read())
 except FileNotFoundError: pass
 else:
 try: os.kill(pid, 0)
 except OSError: pass
 else: return False
 print(mypid, file=open(lockfile, 'w'))
 return True
if not ok2run("/tmp/lockfile"): sys.exit(0)
--
D'Arcy J.M. Cain
Vybe Networks Inc.
http://www.VybeNetworks.com/
IM:darcy at Vex.Net VoIP: sip:darcy at VybeNetworks.com


More information about the Python-list mailing list

AltStyle によって変換されたページ (->オリジナル) /