Bien sûr, l'exemple de Dan ne fonctionnera pas comme il se doit.
En effet, si le script crash, lever une exception, ou ne pas nettoyer le fichier pid, le script sera exécuté plusieurs fois.
Je suggère ce qui suit à partir d'un autre site web:
C'est pour vérifier s'il existe déjà un fichier de verrouillage existant
\#/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"))
C'est la partie du code où nous avons mis un fichier PID dans le fichier de verrouillage
pidfile = open(os.path.expanduser("~/.lockfile.vestibular.lock"), "w")
pidfile.write("%s" % os.getpid())
pidfile.close()
Ce code permet de vérifier la valeur de pid par rapport aux processus en cours d'exécution., éviter la double exécution.
J'espère que ça aidera.