Por supuesto, el ejemplo de Dan no funcionará como debería.
De hecho, si el script falla, genera una excepción o no limpia el archivo pid, el script se ejecutará varias veces.
Sugiero lo siguiente basado en otro sitio web:
Esto es para verificar si ya existe un archivo de bloqueo
\#/usr/bin/env python
import os
import sys
if os.access(os.path.expanduser("~/.lockfile.vestibular.lock"), os.F_OK):
#if the lockfile is already there then check the PID number
#in the lock file
pidfile = open(os.path.expanduser("~/.lockfile.vestibular.lock"), "r")
pidfile.seek(0)
old_pid = pidfile.readline()
# Now we check the PID from lock file matches to the current
# process PID
if os.path.exists("/proc/%s" % old_pid):
print "You already have an instance of the program running"
print "It is running as process %s," % old_pid
sys.exit(1)
else:
print "File is there but the program is not running"
print "Removing lock file for the: %s as it can be there because of the program last time it was run" % old_pid
os.remove(os.path.expanduser("~/.lockfile.vestibular.lock"))
Esto es parte del código donde colocamos un archivo PID en el archivo de bloqueo
pidfile = open(os.path.expanduser("~/.lockfile.vestibular.lock"), "w")
pidfile.write("%s" % os.getpid())
pidfile.close()
Este código comprobará el valor de pid en comparación con el proceso en ejecución existente, evitando la doble ejecución.
Espero que te ayude.