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

原文链接:https://my.oschina.net/u/1391177/blog/1837226

在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

上一篇:fcntl函数学习


下一篇:fcntl文件加锁