我是靠谱客的博主 积极茉莉,这篇文章主要介绍print python 如何加锁_Linux环境下,python给程序加锁之fcntl模块的使用,现在分享给大家,希望可以做个参考。

在 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
    2
    fcnt.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
21
import 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()

运行结果:

0b01c327a5d57252a3b255e99be41dd0.png
运行结果

最后

以上就是积极茉莉最近收集整理的关于print python 如何加锁_Linux环境下,python给程序加锁之fcntl模块的使用的全部内容,更多相关print内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(71)

评论列表共有 0 条评论

立即
投稿
返回
顶部