场景需求
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
的方式来捕捉以外错误,同时释放文件锁。