首页 > 其他分享 >filelock-文件锁的使用

filelock-文件锁的使用

时间:2023-08-03 18:48:18浏览次数:66  
标签:文件 filelock lock FileLock file 使用 import 锁定

filelock 用于文件锁定

用于多进程或多线程对同一文件的操作

用法:
from filelock import FileLock
lock = FileLock("file.lock")
with lock:
    # Do something with the file
说明:
  • 1.如果文件不存在,会自动创建
  • 2.如果文件已经被锁定,会等待锁定释放后再执行
  • 3.如果文件已经被锁定,可以通过lock.is_locked()判断是否被锁定
  • 4.如果文件已经被锁定,可以通过lock.break_lock()强制释放锁定
  • 5.如果文件已经被锁定,可以通过lock.i_am_locking()判断是否是自己锁定的
  • 6.如果文件已经被锁定,可以通过lock.release()释放锁定
  • 7.如果文件已经被锁定,可以通过lock.acquire(timeout=10)等待锁定释放,超时时间为10秒
  • 8.如果文件已经被锁定,可以通过lock.acquire(timeout=-1)等待锁定释放,超时时间为无限等待
  • 9.如果文件已经被锁定,可以通过lock.acquire(timeout=0)判断是否被锁定,如果被锁定返回False,否则返回True
以下案例为同时对同一文件进行读写操作
import os
import time
import threading
from filelock import FileLock

def write():
    lock = FileLock("file.lock")
    with lock:
        with open("file.txt", "a") as f:
            f.write("write\n")
        time.sleep(1)

def read():
    lock = FileLock("file.lock")
    with lock: # 如果文件已经被锁定,会等待锁定释放后再执行
        with open("file.txt", "r") as f:
            print(f.read())
        time.sleep(1)

if __name__ == "__main__":

    if os.path.exists("file.txt"):
        os.remove("file.txt")

    t1 = threading.Thread(target=write)
    t2 = threading.Thread(target=read)
    t1.start()
    t2.start()
    t1.join()
    t2.join()

标签:文件,filelock,lock,FileLock,file,使用,import,锁定
From: https://www.cnblogs.com/Centigrade/p/17604155.html

相关文章

  • spring-mvc系列:简介和基本使用
    目录一、简介1、什么是MVC2、什么是SpringMVC3、SpringMVC的特点二、基本使用1、开发环境2、创建maven工程3、配置web.xml4、创建SpringMVC的配置文件5、创建请求控制器6、创建html页面7、总结一、简介1、什么是MVCMVC是一种软件架构的思想,将软件按照模型、视图、控制器来划分......
  • 直线导轨使用中常见的问题有哪些?
    直线导轨作为设备的核心部件之一,起着导向和支撑的作用功能。目前,已被广泛应用在各行各业中,大到机械设备,小到抽屉,我们都能看到直线导轨的身影,可以说,直线导轨已经悄无声息的进入到我们的生活了。任何零部件,在使用中都会遇到各种各样的问题,直线导轨也不例外,那么在使用直线导轨时,哪些问......
  • 使用windows访问另一台windows中的vmware虚拟机
    使用windows访问另一台windows中的vmware虚拟机一、场景描述在平常的学习中,当我们的设备较多且都为windows设备时,通常会遇到在一台windows中需要访问另一台windows上的虚拟机,需求如图:二、问题分析首先我们的两台windows之间是可以正常通信的windows与vm是可以正常通信的......
  • 浅谈 rxgo 在项目中的使用方式
    项目中使用到了RxGo,感觉现有的处理方式有一定的优势,当然也有一定的有劣势,遂记录下来,免得自己忘记。本文介绍的只是rxgo的一种方式而已,如果你有不错的使用方式,请不吝赐教,谢谢。对rxgo不清楚的同学可以看看我的另一篇文章,主要是介绍rxgo的基础使用。Go中响应式编程库Rx......
  • 【软件工具安装使用】boost的安装使用和交叉编译
    前言 一、编译安装 二、交叉编译安装注意空格;注意路径; 参考1. BoostC++Libraries;2. ubuntu22.04源码编译安装boost库_奇妙之二进制的博客-CSDN博客;3. Boost1.74.0交叉编译_hrx-@@的博客-CSDN博客;4. BoostGettingStartedonUnixVariants-1.82.0;5. Bo......
  • 【软件工具安装使用】opencv交叉编译
    前言 环境准备 编译配置 opencv交叉编译  opencv_contrib交叉编译 问题1. 对‘png_do_expand_palette_rgba8_neon’未定义的引用若出现3rdparty/lib/liblibpng.a(pngrtran.c.o):在函数‘png_do_read_transformations’中:pngrtran.c:(.text.png_do_read_transf......
  • C# MVC 自学笔记—10 在 ASP.NET MVC 中使用页面检查器
    VisualStudio2012年页督察是与集成的浏览器的web开发工具。中集成浏览器中,选择任意元素,页面检查器立即突出显示该元素的源代码和CSS。可以浏览任何MVC视图、快速查找呈现标记的来源和使用右内的VisualStudio环境浏览器工具。观看视频本教程演示如何启用检查模式,然后快......
  • VS发布 错误 未能将文件 复制到
    自己一手搭建的网站ASP.MVC4最近修改写功能之后一直发布不了一直报错误15未能将文件easyui\themes\gray\images\Thumbs.db 复制到obj\Release\Package\PackageTmp\easyui\themes\gray\images\Thumbs.db。未能找到文件“easyui\themes\gray\images\Thumbs.db”。00M......
  • 三步教你怎么使用iSCSI Manager,你GET了吗?
    铁威马有很多实用的功能,帮助我们更好的保存数据。铁威马的iSCSIManager可帮助您轻松管理和监控iSCSI服务。挂载成功之后,您访问iSCSILUN的虚拟磁盘就像访问本地存储空间一样方便。那么怎么使用iSCSIManager?下面分三大步为大家详细介绍该用法,快速上手不在话下~ 01如何下......
  • Mybatis-Plus代码生成器的使用
    通常我们在做项目的时候,要手动搭建项目的结构,如controller,service,mapper,entity,是不是很麻烦,特别是数据库表特别多时,现在介绍一下使用MybatisPlus时怎么自动生成这些代码。首先要在项目的pom.xml里引入必要的依赖,如下:<dependency><groupId>com.baomidou</groupId><ar......