Python锁文件实现(其中第二种方法是转载的)

通过创建锁文件或利用socket.bind实现Python程序确保仅有一个实例运行。锁文件方法依赖atexit模块在程序退出时自动删除,而socket.bind方法更为简洁。
摘要由CSDN通过智能技术生成

有时候我们需要程序只存在一个运行实例。一般方法就是创建一个锁文件 ,然后运行完成后删除该锁文件 。


import os

LOCK_FILE = "/tmp/lockfile.tmp"

def hasSelfProcess():
    """
    检查本程序是否已经被用户启动了

    @return: True: 本程序已经被用户启动
    False: 本程序未被用户启动
    @rtype: boolean
    """
    try:
        os.open(LOCK_FILE, os.O_CREAT|os.O_EXCL|os.O_RDWR)
    except OSError:
        return True
    else:
        return False

在每次运行程序前,调用此方法进行判断,就可知道本程序是否已经有另外一个实例在运行了。

当然运行完了还要再删除临时文件, 这个可以通过Python的自带模块atexit来实现。

import atexit

@atexit.register
def clearLockFile():
    if osp.isfile(LOCK_FILE):
        try:
            os.remove(LOCK_FILE)
        except OSError:
            os.system("rm -f %s" % LOCK_FILE)

在程序中直接加入以上代码即可,由于用了@atexit.register对clearLockFile进行了装饰,所以当Python程序退出时,会自动

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值