python重复执行_python如何避免脚本重复运行?

这种需求很常见,最常使用的技术就是互斥锁。

例如某个服务运行后,生成一个 PID 文件,里面写入当前运行的进程 PID,运行结束后主动删除这个文件。当有其他进程运行时,先检查这个文件及对应的进程是否存在,存在就是正在运行,否则就可以运行。

现成的例子可以参考 Linux 系统的 /run 目录下的 *.pid 文件。

Windows 系统也是一样,存放在固定的路径就行。

这里有几个注意点:

PID 锁文件的路径最好是绝对路径,如 Linux 下的 /run/service.pid,Windows 的系统盘下面,一般可以写在配置文件里(配置文件有默认的,也可以指定)。如果只是当前目录下的相对文件,如果不小心复制到另一个目录就没用了。

PID 锁文件一般的做法是只写入进程 PID 号,因为程序可能由于意外或者被 kill 等原因被关闭,这样可能就无法主动删除锁文件。所以如果锁文件存在,还要判断下对应的进程是不是存活,不然要手动删除锁文件,这样程序比较健壮。

复杂的场景下需要考虑多用户权限问题,例如锁文件权限,服务执行用户等等,一般是比较成熟后会考虑,如果 Windows 完全是管理员操作可以忽略。

更健壮的程序还需要考虑并发抢占锁的问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值