在 linux 环境下用 Python 进行运维开发经常会遇到一个程序会启动多个进程,为了保证程序在系统中只有一个进程在运行,而此时就要对程序进行加锁控制,在 Python 的 linux 版本下有个 fcntl 模块可以方便的对程序加锁。
fcntl.flock(f.fileno(), operation) operation 的操作包括以下选项:
fcntl.LOCK_EX
排他锁: 除加锁进程外其他进程没有对已加锁文件读写访问权限fcntl.LOCK_UN
解锁: 对加锁文件进行解锁fcntl.LOCK_SH
共享锁: 所有进程都没有写权限,即使加锁进程也没有,但所有进程都有读权限fcntl.LOCK_NB
非阻塞锁: 如果指定此参数,函数不能获得文件锁就立即返回,否则,函数会等待获得文件锁。 LOCK_NB可以同LOCK_SH或LOCK_EX进行按位或(|)运算操作。如果想要在没有获得这个排他锁的情况下不阻塞那些进程,可以与 LOCK_NB 联合使用,那么系统就不会阻塞该进程
复制代码1
2fcnt.flock(f.fileno(),fcntl.LOCK_EX|fcntl.LOCK_NB)
示例:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21import time import fcntl import sys def main(): for i in range(10): time.sleep(1) print("Hello World!") if __name__ == '__main__': file = '/home/liming/Desktop/test.pid' fd = open(file, 'w') try: fcntl.flock(fd.fileno(), fcntl.LOCK_EX | fcntl.LOCK_NB) except OSError: print("Another process is running!") sys.exit(1) main()
运行结果:

最后
以上就是积极茉莉最近收集整理的关于print python 如何加锁_Linux环境下,python给程序加锁之fcntl模块的使用的全部内容,更多相关print内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复