Python3 如何只允许一个脚本实例运行?

场景需求

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

评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注