Tentu saja contoh dari Dan tidak akan berfungsi sebagaimana mestinya.
Memang jika script crash, memunculkan eksepsi, atau tidak membersihkan file pid, script tersebut akan dijalankan berkali-kali.
Saya menyarankan yang berikut ini berdasarkan dari situs web lain:
Ini untuk memeriksa apakah sudah ada file kunci
\#/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"))
Ini adalah bagian dari kode tempat kami meletakkan file PID di file kunci
pidfile = open(os.path.expanduser("~/.lockfile.vestibular.lock"), "w")
pidfile.write("%s" % os.getpid())
pidfile.close()
Kode ini akan memeriksa nilai pid dibandingkan dengan proses yang sedang berjalan, menghindari eksekusi ganda.
Saya harap ini akan membantu.