在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