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利用微信公众号实现报警功能
Jun 10 Python
Python判断字符串是否为字母或者数字(浮点数)的多种方法
Aug 03 Python
使用python判断你是青少年还是老年人
Nov 29 Python
Python实现合并两个有序链表的方法示例
Jan 31 Python
详解pandas库pd.read_excel操作读取excel文件参数整理与实例
Feb 17 Python
详解python的argpare和click模块小结
Mar 31 Python
基于python3抓取pinpoint应用信息入库
Jan 08 Python
python实现的Iou与Giou代码
Jan 18 Python
音频处理 windows10下python三方库librosa安装教程
Jun 20 Python
Python正则re模块使用步骤及原理解析
Aug 18 Python
python基于爬虫+django,打造个性化API接口
Jan 21 Python
Python 实现定积分与二重定积分的操作
May 26 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
php笔记之常用文件操作
2010/10/12 PHP
关于JSON以及JSON在PHP中的应用技巧
2013/11/27 PHP
PHP不用递归实现无限分级的例子分享
2014/04/18 PHP
php格式化时间戳显示友好的时间实现思路及代码
2014/10/23 PHP
学习YUI.Ext第五日--做拖放Darg&Drop
2007/03/10 Javascript
用jquery存取照片的具体实现方法
2013/06/30 Javascript
javascript使用prototype完成单继承
2014/12/24 Javascript
jQuery给多个不同元素添加class样式的方法
2015/03/26 Javascript
jQuery mobile类库使用时加载导航历史的方法简介
2015/12/04 Javascript
jQuery实现漂亮实用的商品图片tips提示框效果(无图片箭头+阴影)
2016/04/16 Javascript
AngularJS通过$http和服务器通信详解
2016/09/21 Javascript
js脚本编写简单刷票投票系统
2017/06/27 Javascript
angularjs使用gulp-uglify压缩后执行报错的解决方法
2018/03/07 Javascript
vue计算属性及使用详解
2018/04/02 Javascript
JQuery模拟实现网页中自定义鼠标右键菜单功能
2018/11/14 jQuery
python通过urllib2爬网页上种子下载示例
2014/02/24 Python
python+opencv实现动态物体追踪
2018/01/09 Python
python实现换位加密算法的示例
2018/10/14 Python
python中pytest收集用例规则与运行指定用例详解
2019/06/27 Python
python自动化测试无法启动谷歌浏览器问题
2019/10/10 Python
TensorFlow索引与切片的实现方法
2019/11/20 Python
Python代码生成视频的缩略图的实例讲解
2019/12/22 Python
keras 特征图可视化实例(中间层)
2020/01/24 Python
Python利用FFT进行简单滤波的实现
2020/02/26 Python
科尔士百货公司官网:Kohl’s
2016/07/11 全球购物
NBA欧洲商店(法国):NBA Europe Store FR
2016/10/19 全球购物
Super-Pharm波兰:药房和香水在一个地方
2020/08/18 全球购物
高二历史教学反思
2014/01/25 职场文书
2015年售票员工作总结
2015/04/29 职场文书
2015年电厂工作总结范文
2015/05/13 职场文书
2015年机关党委工作总结
2015/05/23 职场文书
廉洁自律心得体会2016
2016/01/13 职场文书
django注册用邮箱发送验证码的实现
2021/04/18 Python
Redis持久化与主从复制的实践
2021/04/27 Redis
关于HTML编码导致的乱码问题
2021/09/04 HTML / CSS
Python实现抖音热搜定时爬取功能
2022/03/16 Python