点击(此处)折叠或打开
-
#!/usr/bin/env python
-
#coding=utf-8
-
import sys
-
import os
-
import re
-
import traceback
-
import fcntl
-
-
class PidFile():
-
def __init__(self, file = None):
-
if file == None:
-
argv0_list = sys.argv[0].split("\\")
-
scname = argv0_list[len(argv0_list) - 1]
-
if re.search(".py$", scname):
-
scname = scname[0:-3]
-
self.file = "/tmp/%s.pid" % (scname)
-
else:
-
self.file = file
-
self.pidfile = None
-
-
def _create(self, file):
-
f = open(file, "w")
-
pid = os.getpid()
-
f.write("%s" % (pid))
-
f.close()
-
-
def __enter__(self):
-
if not os.path.isfile(self.file):
-
self._create(self.file)
-
self.pidfile = open(self.file, 'a+')
-
try:
-
fcntl.flock(self.pidfile.fileno(), fcntl.LOCK_EX|fcntl.LOCK_NB)
-
return True
-
except:
-
traceback.print_exc()
-
fpid = open(self.file, "r").read()
-
raise SystemExit("Process id %s Already running , pid to %s " % (fpid, self.file))
-
return False
-
-
def __exit__(self, *args):
-
try:
-
self.pidfile.close()
-
except :
-
pass
-
os.remove(self.file)
-
-
-
if __name__ == "__main__":
-
# use
-
with PidFile() as t:
-
print "lock file %s" % (file)
-
time.sleep(10)
- exit(0)
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26250550/viewspace-1816377/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/26250550/viewspace-1816377/