python并发处理同一个文件_Python多进程操作同一个文件,文件锁问题

最近工作当中做了一个项目,这个项目主要是操作文件的。

在操作耗时操作的时候,我们一般采用多线程或者多进程。在开发中,如果多个线程需要对文件进行读写操作,就需要用到线程锁或者是文件锁。

使用fcntl

在Linux下,Python的标准库有线程的文件锁,来自fcntl模块。这个模块提供了Unix系统fcntl()和ioctl()的接口。

对于文件锁的操作,主要需要使用fcntl.flock(fd,operation)这个函数。

其中,参数fd表示文件描述符;参数operation指定要进行的锁操作,该参数的取值有如下几种:

LOCK_SH:表示要穿件一个共享锁,在任意时间内,一个文件的共享锁可以被多个进程拥有。

LOCK_EX:表示创建一个排它锁,在任意时间内,一个文件的排它锁只能被一个进程拥有

LOCK_UN:表示删除该进程创建的锁

LOCK_MAND:它主要是用于共享模式强制锁,它可以与LOCK_READ或者LOCK_WRITE联合起来使用,从而表示是否允许并发的读操作或者并发的写操作。

我这次工作的应用场景是两个py文件操作同一个文本,所以是多进程操作文本。

#!/usr/bin/python#coding:utf-8

importfcntlimportthreadingimporttimedefwritetoTxt():

id=threading.currentThread().getName()

with open("aaa.txt", "a") as f:#fcntl.flock(f.fileno(), fcntl.LOCK_EX) # 加锁

print("{} acquire

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值