Python多进程环境同时操作时如何互斥操作

news2025/2/22 17:31:25

title: Python多进程环境同时操作时如何互斥操作
tags: [互斥, python]
categories: [Python, 多进程]

在 Python 中,fcntl 模块提供了对文件控制操作的接口,包括文件锁定。fcntl.flock() 函数用于对文件进行锁定,以确保在多进程环境中对文件的访问是互斥的。

galaxy

函数 fcntl.flock(f, operation) 中的参数解释如下:

  • f 是一个文件描述符,即打开文件后返回的文件对象的 fileno() 方法的结果。
  • operation 是锁定操作的类型,可以是以下几种组合:
    • fcntl.LOCK_EX:表示排他锁定(exclusive lock),同一时间只能有一个进程可以对文件进行写操作。
    • fcntl.LOCK_SH:表示共享锁定(shared lock),多个进程可以同时对文件进行读操作。
    • fcntl.LOCK_NB:表示非阻塞模式,如果锁定不能立即获得,函数会立即返回而不是等待。

在你提供的代码片段 fcntl.flock(f, fcntl.LOCK_EX | fcntl.LOCK_NB) 中,fcntl.LOCK_EX 表示尝试获取一个排他锁定,fcntl.LOCK_NB 表示如果锁定不能立即获得,则不会阻塞当前进程,函数会立即返回。

如果该调用成功,表示当前进程已经获得了排他锁定,可以安全地对文件进行写操作。如果调用失败(例如因为文件已经被其他进程锁定),则表示当前进程未能获得锁定,可以进行错误处理或重试逻辑。

请注意,使用文件锁定时,需要确保在完成文件操作后释放锁定,即使在发生异常的情况下也应该如此。可以通过调用 fcntl.flock(f, fcntl.LOCK_UN) 来释放锁定,其中 fcntl.LOCK_UN 表示解锁操作。

import fcntl
import atexit

f = open("scheduler.lock", "wb")
# noinspection PyBroadException
try:
    fcntl.flock(f, fcntl.LOCK_EX | fcntl.LOCK_NB)
    # 这里是对文件或者其他资源的写操作,不用担心其他进程会有写操作
except:
    pass

def unlock():
    fcntl.flock(f, fcntl.LOCK_UN)
    f.close()

atexit.register(unlock)

我的使用场景就是,使用flask启动apscheduler调度器时,wsgi指定了多个worker,导致定时任务运行多次,这里限制了单个worker启动scheduler,可以解决这个问题。

gunicorn --workers 3 --bind 0.0.0.0:5000  --access-logfile access.log --error-logfile error.log --access-logformat  "{'remote_ip':'%(h)s','request_id':'%({X-Request-Id}i)s','response_code':'%(s)s','request_method':'%(m)s','request_path':'%(U)s','request_querystring':'%(q)s','request_timetaken':'%(D)s','response_length':'%(B)s'}" --log-level info   --daemon   wsgi:app

heart

#乐知付 您的资源可变现平台,你管理资源,我管理密码。


书山有路勤为径,学海无涯苦作舟。

欢迎关注公众号:【程序员写书】

一起学习,一起进步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1954571.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

接口自动化测试框架实战-1-项目环境搭建

上一小节中我们讲解了一下本次接口自动化测试框架的大致架构设计和功能概览,本小节我们讲解一下整个项目开发环境的搭建方法。 1、python基础环境 安装python3版本:建议3.9.6版本及以上即可 新建项目的虚拟环境:virtualenv或者pycharm自带的…

MyBatis的入门操作--打印日志和增删改查(单表静态)

下面介绍注解和xml实现crud的操作 目录 一、日志打印和参数传递 1.1.使用mybatis打印日志 1.2.参数传递细节 二、crud(注解实现) 2.1.增(insert) 2.2.删(delete) 和 (update) 2.3.查(select) 三、crud(xml实现) 3.1.准备…

环境搭建-Windows系统搭建Docker

Windows系统搭建Docker 一、系统虚拟化1.1 启用虚拟化2.2 启用Hyper-v并开启虚拟任务 三、安装WSL3.1 检验安装3.2 安装WSL 四、Docker安装4.1 Docker安装包下载4.2 Docker安装4.3 运行docker Desktop 五、Docker配置5.1 打开Docker配置中心5.2 配置Docker国内镜像 六、使用 一…

WIN7系统安装,BIOS+MBR方式

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收…

【数据结构初阶】单链表经典算法题十二道——得道飞升(中篇)

hi,bro—— 目录 5、 链表分割 6、 链表的回文结构 7、 相交链表 8、 环形链表 【思考】 —————————————— DEAD POOL —————————————— 5、 链表分割 /* struct ListNode {int val;struct ListNode *next;ListNode(int x) : val(x), …

C++编程: 使用 Nanomsg 进行 PUB-SUB 模式基准测试

文章目录 0. 引言1. Nanomsg简介1.1 可扩展性协议类型1.2 支持的传输机制1.3 NanoMsg 架构与实现 2. PUB-SUB 模式基准测试 0. 引言 Nanomsg 作为一款高性能的通信库,支持多种消息传递模式,其中包括 PUB-SUB(发布-订阅)。 本篇文…

【NPU 系列专栏 2.4 -- 高速互连 NVLink 详细介绍】

请阅读【嵌入式及芯片开发学必备专栏】 文章目录 NVLink 简介NVLink 主要特点NVLink 应用场景NVLink 工作原理NVLink 实例介绍DL 中使用 NVLinkHPC 中使用 NVLinkSummaryNVLink 简介 NVLink 是 NVIDIA 开发的一种高速互连技术,旨在提升 GPU 与 GPU 之间以及 GPU 与 CPU 之间的…

simapro碳捕集

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收…

SpringBoot整合阿里云短信业务

详细介绍SpringBoot整合阿里云短信服务的每一步过程,同时会将验证码存放到Redis中并设置过期时间,尽量保证实战的同时也让没做过的好兄弟也能实现发短信的功能~ 1. 注册阿里云账号和创建Access Key 首先,你需要注册一个阿里云账号&#xff0…

【轨物方案】电表红外抄表物联网装置

对于光伏运维工程师来说,电表抄表是一件并不陌生的工作,不过很多并网电表的RS485通讯接口一般都被占用了,并且电表的外壳也被铅封起来。在这种情况下电站通常采用人工抄表的方式采集电量数据,这种方式费时费力,对电站运…

【研发日记】Matlab/Simulink技能解锁(十)——PID调参技巧

文章目录 前言 项目背景 参数P调节 参数I调节 参数D调节 整体优化 分析和应用 总结 参考资料 前言 见《【研发日记】Matlab/Simulink技能解锁(五)——七个Simulink布线技巧》 见《【研发日记】Matlab/Simulink技能解锁(六)——六种Simulink模型架构》 见《【研发日记】…

WEB前端11-Vue2基础01(项目构建/目录解析/基础案例)

Vue2基础(01) 1.Vue2项目构建 步骤一:安装前端脚手架 npm install -g vue/cli步骤二:创建项目 vue ui步骤三:运行项目 npm run serve步骤四:修改vue相关的属性 DevServer | webpack //修改端口和添加代理 const { defineCo…

7·19微软蓝屏事件:对全球 IT 基础设施的冲击与反思

719微软蓝屏事件:对全球 IT 基础设施的冲击与反思 一、引言二、事件的详细剖析三、网络安全与系统稳定性的挑战四、构建稳固和安全网络环境的建议五、各领域的有效实践六、总结与展望 719微软蓝屏事件是指当地时间2024年7月19日美国网络安全企业“群集打击”&#x…

Cocos Creator2D游戏开发-(1)初始化设置

初心: 做一款微信或者抖音小游戏,然后发布,对于我来说这是一个新的赛道; 写这些文档的原因,记录一下自己学习过程,下次用的时候方便找 cocos creator版本: 3.8.3 当前小游戏飞机大战教程来源于: 抖音: 禅影 chanying001 源码目录: https://www.kdocs.cn/l/caLr6XCbEfPa 创建一个…

【iOS】KVO底层原理

KVO底层原理 KVO概述KVO常用方法注册监听器详细解释1. 系统不会增加观察者对象的引用计数2. 对象释放后观察者不会自动置空3. 需要自己持有观察者对象的强引用 示例代码Person 类Observer 类main 函数 解释删除监听器监听器对象的监听回掉方法 KVO内部实现_NSSetLongLongValueA…

脑网络布线成本优化——从Caja守恒原则到最小化成本的探索

脑网络布线成本优化——从Caja守恒原则到最小化成本的探索 Caja守恒原则的核心作用 Caja守恒原则,即大脑组织的布线成本最小化原则,是神经科学中的一个重要概念。它指出,大脑在组织结构上倾向于最小化连接神经元以构成环路或网络所涉及的布…

掌握 Python 面向对象编程与模块化导入技巧

文章目录 前言一、封装、继承、多态1. 封装2. 继承3. 多态 二、导入模块1. 导入整个模块2. 导入模块的特定部分3. 导入模块中的所有功能4. 导入整个模块并重命名5. 导入模块的特定部分并重命名 三、函数参数类型1. 位置参数2. 关键字参数3. 默认参数4. 可变参数 总结 前言 在 …

vue3-01创建项目

一、创建一个 Vue 应用 1、前提条件 前提条件: 已安装 18.3 或更高版本的 Node.js,如果当前的node 版本低于18的话,也没关系,可以使用这个命令行,忽略忽略引擎版本的检查 yarn config set ignore-engines true2、创建…

【数学建模】——【python】实现【最短路径】【最小生成树】【复杂网络分析】

目录 1. 最短路径问题 - 绘制城市间旅行最短路径图 题目描述: 要求: 示例数据: python 代码实现 实现思想: 要点: 2. 最小生成树问题 - Kruskal算法绘制MST 题目描述: 要求: 示例数据…