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:da...@vex.net VoIP: sip:da...@vybenetworks.com -- https://mail.python.org/mailman/listinfo/python-list