场景需求
Python3中如何保证同样的脚本在运行时只允许一个运行实例,不允许新建一个脚本重新运行?我们这里使用文件锁的方式,简单方便。下面给出代码实例。
代码实例
import sys ,os
def lockFile(lockfilepath):
'''
:param lockfilepath:文件锁,文件名
'''
if os.path.exists(lockfilepath):
#文件存在,说明脚本正在执行
logging.critical("×××××× 脚本正在执行中,退出本次调度 ××××××")
sys.exit()
else:
#文件不存在,创建文件,并执行任务。
logging.info('已开启文件锁 %s',lockfilepath)
subprocess.getoutput('echo "" > '+lockfilepath)
return True
def unLockFile(lockfilepath):
os.remove(lockfilepath)
logging.info('已释放文件锁 %s',lockfilepath)
调用方法
lockFileName = '/tmp/SCHEDULINGVLAN.Lock'
func.lockFile(lockFileName)
#.... do something else ....
func.unLockFile(lockFileName)
这里lockfileName设定了文件存储位置。
如果程序意外出错,执行不到程序的最下面释放文件锁的话,永远无法新起脚本进程。
当然这里也可以使用try / catch
的方式来捕捉以外错误,同时释放文件锁。