使用文件锁 保证某个程序只启动一次

这篇博客探讨了如何利用fcntl模块在Linux系统中实现文件锁,从而保证定时任务在多进程中只能启动一次,避免资源冲突。文章通过提供测试案例展示了具体的实现代码。
摘要由CSDN通过智能技术生成

使用文件锁保证定时任务只启动一次

def singleton_scheduler():
    """文件锁实现单例定时启动"""
    import os
    import platform, atexit

    def start_scheduler():
        if platform.system() != "Windows":
            print('开始执行')

    # path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'scheduler.lock')
    pid_file = open("scheduler.lock", "wb")
    try:
        import fcntl
        fcntl.flock(pid_file, fcntl.LOCK_EX | fcntl.LOCK_NB)  # 创建一个排他锁,并且所被锁住其他进程不会阻塞
        start_scheduler()
    except IOError as e:
        print("已经有一个实例在运行")
    except ModuleNotFoundError as e:
        print("windows 没有这个fcntl模块, 定时任务未启动")
 
    def unlock():
        print('退出回调')
        fcntl.flock(pid_file, fcntl.LOCK_UN)
        pid_file.close()

    '''注册一个退出回调函数,用于在程序退出时进行一些清理工作,关闭文件,解除锁'''
    atexit.register(unlock)


sin
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>