python脚本避免启动多个副本程序

在linux系统中,当写好一个python脚本,需要定时启动,但是要保证系统中只有该程序的一个进程在运行,不 允许出现多个副本程序运行, Linux下的许多程序都是按此原理实现的, 可以看到/var/run/*.pid文件。

解决此问题的思路,利用程序对文件锁的状态下,只能有一个进程获得锁,当脚本启动时候,检查文件锁的状态,就可以保证不会出现多个相同进程在运行。

实现代码如下,

import fcntl
import sys

lock_filename = '/tmp/sample-locking.lock'
lock_file = open(lock_filename, 'w')

try:
    fcntl.lockf(lock_file, fcntl.LOCK_EX | fcntl.LOCK_NB)
except IOError:
    print('Cannot lock: ' + lock_filename)
    sys.exit(1)

print('Locked! Running code...')

quit = False
while quit is not True:
    quit = input('Press q to quit ')
    quit = str(quit) == 'q'

print('Bye!')

 

PS:如果使用此代码在类里面实现,记得要将打开的文件lock_file赋值给类属性,避免作为局部变量后,运行后被垃圾回收释放了锁。

参考文献:http://blog.e-shell.org/309

 

 

转载于:https://my.oschina.net/u/1391177/blog/1837226

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值