我是靠谱客的博主 积极茉莉,最近开发中收集的这篇文章主要介绍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 联合使用,那么系统就不会阻塞该进程

    fcnt.flock(f.fileno(),fcntl.LOCK_EX|fcntl.LOCK_NB)
    

示例:

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 python 如何加锁_Linux环境下,python给程序加锁之fcntl模块的使用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部