标签:脚本 fcntl 副本 quit python lock filename blog print
原文链接: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,副本,quit,python,lock,filename,blog,print 来源: https://blog.csdn.net/chizhang1322/article/details/100800718
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。