É claro que o exemplo de Dan não funcionará como deveria.
Na verdade, se o script travar, gerar uma exceção ou não limpar o arquivo pid, o script será executado várias vezes.
Sugiro o seguinte com base em outro site:
Isso é para verificar se já existe um arquivo de bloqueio existente
\#/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"))
Isso é parte do código onde colocamos um arquivo PID no arquivo de bloqueio
pidfile = open(os.path.expanduser("~/.lockfile.vestibular.lock"), "w")
pidfile.write("%s" % os.getpid())
pidfile.close()
Este código verificará o valor de pid em comparação com o processo em execução existente., Evitando execução dupla.
Eu espero que isso ajude.