Python简单进程锁代码实例


Posted in Python onApril 27, 2015

先说说线程

在多线程中,为了保证共享资源的正确性,我们常常会用到线程同步技术.
将一些敏感操作变成原子操作,保证同一时刻多个线程中只有一个线程在执行这个原子操作。
我最常用的是互斥锁,也称独占锁。其次还有读写锁,信号量,条件变量等。
除此之外,我们在进程间通信时会用到信号,向某一个进程发送信号,该进程中设置信号处理函数,然后当该进程收到信号时,执行某些操作。
其实在线程中,也可以接受信号,利用这种机制,我们也可以用来实现线程同步。更多信息见 https://3water.com/article/64977.htm

再说说进程

进程里我们通过一些进程间通信方式,可以实现进程间的同步。
最近我遇到的一个情况是,某采集系统进程池中很多进程会向同一个日志文件中打印日志,如果通过进程间通信实现,比较麻烦。
还有一种办法,如果采用共享内存的方式,不同的进程分别将日志消息通过共享内存放入一个线程安全的队列中,再建立一个进程负责专门打印日志,这样也可以保证不被大乱,
保证日志的正确性,但代码量也很多阿。
还有一种办法,在共享内存中设置一个互斥锁,所有进程共享。
如果能像线程一样,有一个简单的互斥锁,用的时候只要加锁,就能实现进程间的互斥就好了。之前对文件加锁,也有些印象,于是我用它实现了一个进程间的互斥锁

#coding=utf-8 
 
""" 
Process mutex lock. 
Actually it is implemented by file lock. 
""" 
 
import fcntl 
 
class ProcessLock(object): 
 
    __lockfd = None 
 
    @staticmethod 
    def lock(): 
        ProcessLock.__lockfd = open(__file__, 'a+') 
        fcntl.flock(ProcessLock.__lockfd, fcntl.LOCK_EX) 
 
    @staticmethod 
    def unlock(): 
        fcntl.flock(ProcessLock.__lockfd, fcntl.LOCK_UN)

加锁  ProcessLock.lock()
释放 ProcessLock.unlock()
非常简单使用,有兴趣的朋友可以试一试。

Python 相关文章推荐
python网络编程之读取网站根目录实例
Sep 30 Python
Python获取DLL和EXE文件版本号的方法
Mar 10 Python
Python利用IPython提高开发效率
Aug 10 Python
WINDOWS 同时安装 python2 python3 后 pip 错误的解决方法
Mar 16 Python
基于Django的python验证码(实例讲解)
Oct 23 Python
spark: RDD与DataFrame之间的相互转换方法
Jun 07 Python
在NumPy中创建空数组/矩阵的方法
Jun 15 Python
转换科学计数法的数值字符串为decimal类型的方法
Jul 16 Python
在Python中使用turtle绘制多个同心圆示例
Nov 23 Python
Python matplotlib 绘制双Y轴曲线图的示例代码
Jun 12 Python
解决Keyerror ''acc'' KeyError: ''val_acc''问题
Jun 18 Python
python基础入门之字典和集合
Jun 13 Python
在Python中使用列表生成式的教程
Apr 27 #Python
讲解Python中的递归函数
Apr 27 #Python
理解Python中函数的参数
Apr 27 #Python
Python中自定义函数的教程
Apr 27 #Python
在Python中使用dict和set方法的教程
Apr 27 #Python
在Python中使用判断语句和循环的教程
Apr 25 #Python
详解Python中列表和元祖的使用方法
Apr 25 #Python
You might like
详解WordPress开发中的get_post与get_posts函数使用
2016/01/04 PHP
PHP curl批处理及多请求并发实现方法分析
2018/08/15 PHP
基于jquery的tab切换 js原理
2010/04/01 Javascript
使用javascript实现判断当前浏览器
2015/04/14 Javascript
a标签跳转到指定div,jquery添加和移除class属性的实现方法
2016/10/10 Javascript
Vue2.0权限树组件实现代码
2017/08/29 Javascript
使用vue + less 实现简单换肤功能的示例
2018/02/21 Javascript
Vue2.0使用嵌套路由实现页面内容切换/公用一级菜单控制页面内容切换(推荐)
2019/05/08 Javascript
[05:00]TI9战队采访 - Royal Never Give Up
2019/08/20 DOTA
Python通过正则表达式选取callback的方法
2015/07/18 Python
使用python绘制常用的图表
2016/08/27 Python
CentOS 6.X系统下升级Python2.6到Python2.7 的方法
2016/10/12 Python
python递归查询菜单并转换成json实例
2017/03/27 Python
Python贪吃蛇游戏编写代码
2020/10/26 Python
python学生信息管理系统
2018/03/13 Python
jupyter notebook引用from pyecharts.charts import Bar运行报错
2020/04/23 Python
numpy向空的二维数组中添加元素的方法
2018/11/01 Python
python自定义函数实现一个数的三次方计算方法
2019/01/20 Python
Python FTP文件定时自动下载实现过程解析
2019/11/12 Python
vscode写python时的代码错误提醒和自动格式化的方法
2020/05/07 Python
阻止移动设备(手机、pad)浏览器双击放大网页的方法
2014/06/03 HTML / CSS
巴西宠物商店:Cobasi
2019/04/19 全球购物
西班牙最大的婴儿用品网上商店:Bebitus
2019/05/30 全球购物
极简鞋类,赤脚的感觉:Lems Shoes
2019/08/06 全球购物
荣耀俄罗斯官网:HONOR俄罗斯
2020/10/31 全球购物
C#公司笔试题
2014/03/28 面试题
大专生自我鉴定范文
2013/10/01 职场文书
学生学习总结的自我评价
2013/10/22 职场文书
大学生关于奋斗的演讲稿
2014/01/09 职场文书
公务员转正考察材料
2014/02/07 职场文书
战略合作意向书范本
2014/04/01 职场文书
建设单位项目负责人任命书
2014/06/06 职场文书
2015年事业单位工作总结
2015/04/27 职场文书
vue组件的路由高亮问题解决方法
2021/05/11 Vue.js
Python 的 sum() Pythonic 的求和方法详细
2021/10/16 Python
斗罗大陆八大特殊魂兽,龙族始祖排榜首,第五最残忍(翠魔鸟)
2022/03/18 国漫