如果没有fcntl模块则用

sudo pip install fcntl安装

模块简单说明:

  打开文件,不存在则创建之
  f = open('./test','w')
  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)

实例代码:

  

 #!/usr/bin/python
#coding:utf8 import os
import sys
import time
import fcntl class FLOCK(ojbect):
def __init__(self,name): self.fobj = open(name,'w')
self.fd = self.fobj.fileno() def lock(self):
try:
#给文件加锁,使用了fcntl.LOCK_NB
fcntl.lockf(sefl.fd,fcntl.LOCK_EX|fcntl.LOCK_NB)
print '给文件加锁,稍等 ... ...'
time.sleep(20)
return True
except:
print '文件加锁,无法执行,请稍后运行。'
retrun 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 lock.py test
test
file lock please waiting..... (在等待期间,在另一个终端,运行此程序会有下面的结果)
文件已加锁

# python lock.py test
test
file no lock please check file...
无法执行,程序已锁定,请稍等

python 中给文件加锁——fcntl模块的更多相关文章

  1. Python中给文件加锁

    首先要引入库import fcntl打开一个文件f = open('./test')对该文件加密:fcntl.flock(f, fcntl.LOCK_EX)这样就对文件test加锁了,如果有其他进程要 ...

  2. python中给程序加锁之fcntl模块的使用

    python 中给文件加锁——fcntl模块import fcntl 打开一个文件##当前目录下test文件要先存在,如果不存在会报错.或者以写的方式打开f = open('./test')对该文件加 ...

  3. [转]python中对文件、文件夹的操作——os模块和shutil模块常用说明

    转至:http://l90z11.blog.163.com/blog/static/187389042201312153318389/ python中对文件.文件夹的操作需要涉及到os模块和shuti ...

  4. 关于Python中的文件操作(转)

    总是记不住API.昨晚写的时候用到了这些,但是没记住,于是就索性整理一下吧: python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Pyth ...

  5. python中对文件、文件夹,目录的基本操作

    一.python中对文件.文件夹操作时经常用到的os模块和shutil模块常用方法.1.得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd()2.返回指定目录下的所有文件和目 ...

  6. Python中的文件和目录操作实现

    Python中的文件和目录操作实现 对于文件和目录的处理,虽然可以通过操作系统命令来完成,但是Python语言为了便于开发人员以编程的方式处理相关工作,提供了许多处理文件和目录的内置函数.重要的是,这 ...

  7. python中对文件、文件夹的操作

    python中对文件.文件夹的操作需要涉及到os模块和shutil模块. 创建文件: 1) os.mknod("test.txt")       创建空文件 2) open(&qu ...

  8. 【Python】解析Python中的文件操作

    目录结构: contents structure [-] 简介 Python中的文件类型 内置函数的文件操作 open()函数 Mode 创建文本文件 读取文本文件 循环文件对象 关闭文件 With语 ...

  9. Python与CSV文件(CSV模块)

    Python与CSV文件(CSV模块)   1.CSV文件 CSV(逗号分隔值)格式是电子表格和数据库最常用的导入和导出格式.没有“CSV标准”,因此格式由许多读写的应用程序在操作上定义.缺乏标准意味 ...

随机推荐

  1. JS add script tag to dynamically call script

    //IE: var script = document.createElement("script"); script.setAttribute("type", ...

  2. Push pull, open drain circuit, pull up, pull down resistor

    Push pull 就以下面這個 電路來說, 因為沒有 pull up resistor, 所以 output voltage 由 low 往 high 的速度會較快. 有兩個電晶體,一個on,一個 ...

  3. FormatDateTime 当前时间减去几小时的做法

    top_start_modified := FormatDateTime('yyyy-mm-dd hh:mm:ss',(Now - ((1/24)*3)));    top_end_modified ...

  4. js-Flexbox盒子布局

    这个年轻的时候,我在项目中其实很少用到: 现在老了,发现了他的好处,我就开始慢慢用到了: 但是其实我对他还是不熟悉的,很陌生,在此做个笔记,加油

  5. (5)python tkinter-单选、多选

    单选按钮 tkinter.Radiobutton(root,text='a').pack() tkinter.Radiobutton(root,text='b').pack() tkinter.Rad ...

  6. 如何在CentOS 7上安装Nginx

    第一步 - 添加Nginx存储库要添加CentOS 7 EPEL仓库,请打开终端并使用以下命令: sudo yum install epel-release第二步 - 安装Nginx现在Nginx存储 ...

  7. UIView之userInteractionEnabled属性介绍-特殊子类覆盖多见于UIImageView和UILabel

    属性作用 该属性值为布尔类型,如属性本身的名称所释,该属性决定UIView是否接受并响应用户的交互. 当值设置为NO后,UIView会忽略那些原本应该发生在其自身的诸如touch和keyboard等用 ...

  8. Android 控件架构与自定义控件详解

    架构: PhoneWindow 将一个 DecorView 设置为整个应用窗口的根 View,这里面所有 View 的监听事件,都通过 WindowManagerService 来接收.DecorVi ...

  9. Azkban上传文件报错installation Failed.Error chunking

    azkaban 上传文件报错Caused by: java.sql.SQLException: The size of BLOB/TEXT data inserted in one transacti ...

  10. Shell脚本部分语法

    Shell中的变量   Linux Shell中的变量分为“系统变量”和“用户自定义变量”,可以通过set命令查看那系统变量 系统变量:$HOME.$PWD.$SHELL.$USER等等 显示当前sh ...