python使用fcntl模块实现程序加锁的方法

  • 更新时间:2020-04-13 08:31:42
  • 编辑:连暄妍

本文实例讲述了python使用fcntl模块实现程序加锁功能。分享给大家供大家参考,具体如下:

python 中引入给文件加锁的 fcntl模块

import fcntl

打开一个文件

##当前目录下test文件要先存在,如果不存在会报错。或者以写的方式打开
f = open('./test')

对该文件加密:

fcntl.flock(f,fcntl.LOCK_EX)

这样就对文件test加锁了,如果有其他进程对test文件加锁,则不能成功,会被阻塞,但不会退出程序。

解锁:fcntl.flock(f,fcntl.LOCK_UN)

fcntl模块:

flock() : flock(f, operation)

operation : 包括:
    fcntl.LOCK_UN 解锁
    fcntl.LOCK_EX  排他锁
    fcntl.LOCK_SH  共享锁
    fcntl.LOCK_NB  非阻塞锁

LOCK_SH 共享锁:所有进程没有写访问权限,即使是加锁进程也没有。所有进程有读访问权限。

LOCK_EX 排他锁:除加锁进程外其他进程没有对已加锁文件读写访问权限。
LOCK_NB 非阻塞锁:
如果指定此参数,函数不能获得文件锁就立即返回,否则,函数会等待获得文件锁。

LOCK_NB可以同LOCK_SH或LOCK_NB进行按位或(|)运算操作。 fcnt.flock(f,fcntl.LOCK_EX|fcntl.LOCK_NB)

请看示例:

import sys
import time
import fcntl
class FLOCK(object):
 def __init__(self, name):
  self.fobj = open(name, 'w')
  self.fd = self.fobj.fileno()
 def lock(self):
  try:
   fcntl.lockf(self.fd, fcntl.LOCK_EX | fcntl.LOCK_NB) # 给文件加锁,使用了fcntl.LOCK_NB
   print '给文件加锁,稍等 ... ...'
   time.sleep(20)
   return True
  except:
   print '文件加锁,无法执行,请稍后运行。'
   return False
def unlock(self):
 self.fobj.close()
 print '已解锁'
if __name__ == "__main__":
 print sys.argv[1]
 locker = FLOCK(sys.argv[1])
 a = locker.lock()
 if a:
  print '文件已加锁'
 else:
  print '无法执行,程序已锁定,请稍等'

先运行一个终端会打印:

  python lockfile.py test
  test
  给文件加锁,稍等 ... ...
  文件已加锁

运行另外一个终端:

  test
     文件加锁,无法执行,请稍后运行。
     无法执行,程序已锁定,请稍等

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python加密解密算法与技巧总结》、《Python编码操作技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

相关教程

  • Python命令行解析模块代码实例

    这篇文章主要介绍了Python命令行解析模块详解,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下

    发布时间:2020-02-05

  • Python中模块导入时全局变量__all__的作用

    今天小编就为大家分享一篇对Python模块导入时全局变量__all__的作用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    发布时间:2020-02-12

  • python telnetlib模块安装实例

    在本篇内容里小编给大家整理了关于python telnetlib模块安装的实例代码内容,需要的朋友们参考学习下。

    发布时间:2019-06-24

  • 实例讲解Python线程下queue(队列)模块的用法

    ​本篇文章给大家带来的内容是关于Python线程下queue(队列)模块的用法,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

    发布时间:2020-02-16

  • Python3.5中NumPy模块的使用图文教程

    这篇文章主要介绍了Python3.5基础之NumPy模块的使用,结合图文与实例形式详细分析了Python3.5中Numpy模块的原理、功能、使用方法及操作注意事项,需要的朋友可以参考下

    发布时间:2020-03-10

  • Python高手之路

    Python高手之路

    Python高手之路(第3版) 不是一本常规意义上Python的入门书。这本书中没有Python关键字和for循环的使用,也没有细致入微的标准库介绍,而是完全从实战的角度出发,对构建一个完整的Python应用所

    大小:157.8 MBPython电子书

  • Python文本分析

    Python文本分析

    本书是Intel首席科学家撰写,全面系统阐释Python文本分析的相关基础知识、实用技术及实践,介绍了文本和语言语法、结构和语义的基础概念和高级概念等,欢迎下载

    大小:100.4 MBPython编程电子书

  • Python游戏编程快速上手(第4版)

    Python游戏编程快速上手(第4版)

    本书通过小巧有趣的游戏来教授Python编程,采用直接展示游戏的源代码并通过实例来解释编程的原理的方式,帮助读者掌握Python游戏编程的基本技能,适合不同年龄和层次的Python编程初学者阅读

    大小:41.2 MBPython游戏编程电子书

  • Python网络爬虫实战

    Python网络爬虫实战

    本书从Python的安装开始,详细讲解了Python从简单程序延伸到Python网络爬虫的全过程。本书从实战出发,根据不同的需求选取不同的爬虫,有针对性地讲解了几种Python网络爬虫。本书共8章,涵盖

    大小:47.4 MBPython爬虫电子书

  • Python3程序开发指南(第2版)

    Python3程序开发指南(第2版)

    本书全面深入地讲解了Python语言,讲述了构成Python语言的8个关键要素,包含数据类型、控制结构与函数、模块、正则表达式、GUI程序设计等各个方面

    大小:419.2 MBPython3电子书

  • Python网络爬虫从入门到实践

    Python网络爬虫从入门到实践

    这本书讲解了如何使用Python编写网络爬虫程序获取互联网上的大数据,包含基础部分、进阶部分和项目实践三个部分,能带领读者从入门到进阶,再到实战,一步步了解爬虫,终写出自己的爬虫程序,欢迎下载

    大小:154.1 MBPython网络爬虫电子书

  • 零基础学Python

    零基础学Python

    本书是针对零基础编程学习者研发的Python自学入门教程,详细地介绍了使用 IDLE 及 Python 框架进行程序管理的知识和技术,手把手教,快速摆脱小白窘境,带你开启编程大门

    大小:314 MBpython编程电子书

  • 从零开始学Python程序设计

    从零开始学Python程序设计

    《从零开始学Python程序设计》是一本关于Python零基础的电子书资源,涉及从零开始、Python、程序设计等相关内容,本文提供大小为172MB的完整影印PDF格式电子书下载,希望大家能够喜欢。

    大小:172 MBPython零基础电子书

  • 跟老齐学Python:数据分析

    跟老齐学Python:数据分析

    大小:198.5 MBPython电子书

  • Python黑客攻防入门

    Python黑客攻防入门

    本书讲述了Python黑客攻防的基础知识、各种黑客攻击技术、黑客攻击学习方法,介绍各种黑客攻击技术、计算机基础知识、应用程序黑客攻击、Web黑客攻击、网络黑客攻击等

    大小:63.1 MB黑客技术电子书

用户留言