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

场景需求

3中如何保证同样的脚本在运行时只允许一个运行实例,不允许新建一个脚本重新运行?我们这里使用文件锁的方式,简单方便。下面给出代码实例。

代码实例

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

腾讯云云产品双12限时秒杀【点击购买】

搬瓦工,CN2高速线路,1GB带宽,电信联通优化KVM,延迟低,速度快,建站稳定,搬瓦工BandwagonHost VPS优惠码BWH26FXH3HIQ,支持<支付宝> 【点击购买】!

Vultr$3.5日本节点,512M内存/500G流量/1G带宽,电信联通优化,延迟低,速度快【点击购买】!

阿里云香港、新加坡VPS/1核/1G/25G SSD/1T流量/30M带宽/年付¥288【点击购买】

百度云不止一折优惠【点击购买】

发表评论

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