python-文件锁
- 文件锁(fcntl)
- fcntl这个模块是Python自带的,但Windows没有,可以手工下载fcntl.py文件,然后保存到python的Lib目录下
- 锁类型(fcntl.flock函数的第二个参数)
LOCK_SH: 表示要创建一个共享锁,所有进程没有写访问权限,即使是加锁进程也没有。所有进程有读访问权限,在任意时间内,一个文件的共享锁可以被多个进程拥有。
LOCK_EX: 表示创建一个排他锁,除加锁进程外其他进程没有对已加锁文件读写访问权限,在任意时间内,一个文件的排他锁只能被一个进程拥有。
LOCK_UN: 表示删除该进程创建的锁
LOCK_NB: 如果指定此参数,函数不能获得文件锁就立即返回,否则,函数会等待获得文件锁。LOCK_NB可以同LOCK_SH或LOCK_NB进行按位或(|)运算操作。 fcnt.flock(f,fcntl.LOCK_EX|fcntl.LOCK_NB)
LOCK_MAND:它主要是用于共享模式强制锁,它可以与 LOCK_READ 或者 LOCK_WRITE 联合起来使用,从而表示是否允许并发的读操作或者并发的写操作(尽管在 flock() 的手册页中没有介绍LOCK_MAND,但是阅读内核源代码就会发现,这在内核中已经实现了)
# -*- coding:utf-8 -*-
'''
锁类型(fcntl.flock函数的第二个参数)
LOCK_SH: 表示要创建一个共享锁,在任意时间内,一个文件的共享锁可以被多个进程拥有
LOCK_EX: 表示创建一个排他锁,在任意时间内,一个文件的排他锁只能被一个进程拥有
LOCK_UN: 表示删除该进程创建的锁
LOCK_MAND:它主要是用于共享模式强制锁,它可以与 LOCK_READ 或者 LOCK_WRITE 联合起来使用,从而
表示是否允许并发的读操作或者并发的写操作(尽管在 flock() 的手册页中没有介绍
LOCK_MAND,但是阅读内核源代码就会发现,这在内核中已经实现了)
'''
import os
import sys
import time
import fcntl
import threading
import random
# 如下例子中,分别加锁和不加锁,结果
# 不加锁时,多个线程间竞争文件写权限,会出现覆盖,导致写内容不可预期(见test.log.withoutlock)
# 加锁时,多个线程间会等待一个线程结束(因为设置的是阻塞锁)后,第二个线程才开始写,不会相互
# 覆盖(见test.log.withlock)
def demo(name="null"):
fp = open("test.log", "a+")
cnt = 0
# 在3s内随机等待一段时间,打乱加锁顺序
time.sleep(float(random.randint(0, 300)) / 300)
fcntl.flock(fp, fcntl.LOCK_EX)
print "call demo by %s" % name
# 在10s内进行写入,为了避免写入的内容过多,写0.5s,停0.5s
for i in range(10):
# 写0.5s
for i in range(100):
fp.write("write by %s, %d\n" % (name, cnt))
cnt += 1
time.sleep(0.005)
# 停0.5s
time.sleep(0.5)
fcntl.flock(fp, fcntl.LOCK_UN)
fp.close()
if __name__ == "__main__":
# 创建3个进程,并发写入
for cnt in range(3):
name = "thread_%d" % cnt
thd = threading.Thread(target=demo, args=(name,))
thd.start()
未加锁时,线程写入异常
python-文件锁的更多相关文章
- Python多进程操作同一个文件,文件锁问题
最近工作当中做了一个项目,这个项目主要是操作文件的. 在操作耗时操作的时候,我们一般采用多线程或者多进程.在开发中,如果多个线程需要对文件进行读写操作,就需要用到线程锁或者是文件锁. 使用fcntl ...
- python中进程间通讯——文件锁之fcntl模块的使用
python 中给文件加锁——fcntl模块import fcntl 打开一个文件##当前目录下test文件要先存在,如果不存在会报错.或者以写的方式打开f = open('./test')对该文件加 ...
- python的文件锁使用
python的文件锁目前使用的是fcntl这个库,它实际上为 Unix上的ioctl,flock和fcntl 函数提供了一个接口. 1.fcntl库的简单使用 import fcntl import ...
- python 使用跨平台文件锁
#encoding=utf-8 print '中国' #使用跨平台文件锁 import os if os.name == 'nt': import win32con,win32file,pywinty ...
- Python中的logging模块
http://python.jobbole.com/86887/ 最近修改了项目里的logging相关功能,用到了python标准库里的logging模块,在此做一些记录.主要是从官方文档和stack ...
- Python爬取CSDN博客文章
0 url :http://blog.csdn.net/youyou1543724847/article/details/52818339Redis一点基础的东西目录 1.基础底层数据结构 2.win ...
- Python实现脚本锁功能,同时只能执行一个脚本
1. 文件锁 脚本启动前检查特定文件是否存在,不存在就启动并新建文件,脚本结束后删掉特定文件. 通过文件的判断来确定脚本是否正在执行. 方法实现也比较简单,这里以python脚本为例 #coding= ...
- 用gdb调试python多线程代码-记一次死锁的发现
| 版权:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.如有问题,可以邮件:wangxu198709@gmail.com 前言 相信很多人都有 ...
- python logging method 02
基本用法 下面的代码展示了logging最基本的用法. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ...
- 嘿!我用python帮我干这些事
python 无疑是当下火上天的语言,但是我们又不拿来工作,那么能拿来干啥呢?我是这么干的. 1. 平时工作开发用不上,就当个计算器吧! python # 加减乘除 >>> (3 + ...
随机推荐
- Python3解析html高级操作
一.xpath相关 1.1 xpath获取节点下的所有内容 问题描述:xpath获取节点下的所有文本可通过“*//text()”实现,但如果想获取节点下的内容---包括文本和标签那就没有直接的办法. ...
- vue中computed、metfods、watch的区别
一.computed和methods 我们可以将同一函数定义为一个 method 或者一个计算属性.对于最终的结果,两种方式确实是相同的. 不同的是computed计算属性是基于它们的依赖进行缓存的. ...
- Python-接口自动化(五)
python基础知识(五) (六)类与对象 类:某一类具有共同属性和特性的事物或者说是一个抽象的描述,比如说大佬类,你就是大佬类里面具体的一个实例.类一般包含属性和方法 (1)类的语法: class ...
- Java中的静态和枚举
一.静态成员 对静态成员最简单的解释,静态成员属于整个类而不属于某个对象,所以又叫做类变量.一个类不管创建多少个实例对象,静态变量在内存中有且只有一个(调用方法用类名调用). 通常的非静态变量称为实例 ...
- 用户认证:基于jwt和session的区别和优缺点
背景知识: Authentication和Authorization的区别: Authentication:用户认证,指的是验证用户的身份,例如你希望以小A的身份登录,那么应用程序需要通过用户名和密码 ...
- layui在open弹出层回显,解决动态select数据回显问题
//监听数据表格工具条 table.on('tool(contentList)', function(obj){ //注:tool是工具条事件名,test是table原始容器的属性 l ...
- storcli 简易使用介绍
MegaCli 是LSI公司官方提供的SCSI卡管理工具,由于LSI被收购变成了现在的Broadcom,所以现在想下载MegaCli,需要去Broadcom官网查找Legacy产品支持,搜索MegaR ...
- sql查询,更新,删除,操作。
UPDATE ht_plan_triptime pptSET ppt.lock_status = '1'WHERE ppt.lock_status <> '1' AND ppt.pl ...
- Static,重载,List的知识点
声明为static的成员可以在它的类的对象创建之前被访问,静态方法不能访问实例变量. 声明为static的变量称为静态变量或类变量,static可以用来修饰属性.方法和代码块. 多重继承的初始化顺序是 ...
- 第十三次作业——回归模型与房价预测&第十一次作业——sklearn中朴素贝叶斯模型及其应用&第七次作业——numpy统计分布显示
第十三次作业——回归模型与房价预测 1. 导入boston房价数据集 2. 一元线性回归模型,建立一个变量与房价之间的预测模型,并图形化显示. 3. 多元线性回归模型,建立13个变量与房价之间的预测模 ...