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 相关文章推荐
rhythmbox中文名乱码问题解决方法
Sep 06 Python
利用Python和OpenCV库将URL转换为OpenCV格式的方法
Mar 27 Python
python制作小说爬虫实录
Aug 14 Python
python模拟表单提交登录图书馆
Apr 27 Python
Python Flask前后端Ajax交互的方法示例
Jul 31 Python
利用python实现短信和电话提醒功能的例子
Aug 08 Python
应用OpenCV和Python进行SIFT算法的实现详解
Aug 21 Python
Python实现自定义读写分离代码实例
Nov 16 Python
Jupyter加载文件的实现方法
Apr 14 Python
解决python pandas读取excel中多个不同sheet表格存在的问题
Jul 14 Python
分享3个非常实用的 Python 模块
Mar 03 Python
Python必备技巧之函数的使用详解
Apr 04 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类常量的使用详解
2013/06/08 PHP
php获取本周开始日期和结束日期的方法
2015/03/09 PHP
PHP模板引擎smarty详细介绍
2015/05/26 PHP
Ubuntu上安装yaf扩展的方法
2018/01/29 PHP
浅析PHP数据导出知识点
2018/02/17 PHP
js实现双向链表互联网机顶盒实战应用实现
2011/10/28 Javascript
JQuery1.6 使用方法三
2011/11/23 Javascript
Javascript中Event属性搜集整理
2013/09/17 Javascript
js/html光标定位的实现代码
2013/09/23 Javascript
javascript内存管理详细解析
2013/11/11 Javascript
一个JavaScript函数把URL参数解析成Json对象
2014/09/24 Javascript
javascript学习笔记(三)BOM和DOM详解
2014/09/30 Javascript
JS动态添加Table的TR,TD实现方法
2015/01/28 Javascript
JS函数定义方式的区别介绍
2016/03/22 Javascript
js获取Get值的方法
2016/09/29 Javascript
AngularJS实现ajax请求的方法
2016/11/22 Javascript
JS html事件冒泡和事件捕获操作示例
2019/05/01 Javascript
Vue-Ant Design Vue-普通及自定义校验实例
2020/10/24 Javascript
微信小程序自定义支持图片的弹窗
2020/12/21 Javascript
Python enumerate遍历数组示例应用
2008/09/06 Python
python2.7删除文件夹和删除文件代码实例
2013/12/18 Python
python中如何使用正则表达式的集合字符示例
2017/10/09 Python
为什么入门大数据选择Python而不是Java?
2018/03/07 Python
TensorFlow实现自定义Op方式
2020/02/04 Python
HTML5 CSS3打造相册效果附源码下载
2014/06/16 HTML / CSS
日本7net购物网:书籍、漫画、杂志、DVD、游戏邮购
2017/02/17 全球购物
Giglio美国站:意大利奢侈品购物网
2018/02/10 全球购物
美国转售二手商品的电子商务平台:BLINQ
2018/12/13 全球购物
医学院校毕业生自荐信范文
2014/01/01 职场文书
新闻发布会主持词
2014/03/28 职场文书
财产公证书格式
2014/04/10 职场文书
借款协议书范本
2014/04/22 职场文书
暑假安全教育广播稿
2014/09/10 职场文书
中国式结婚:司仪主持词(范文)
2019/07/25 职场文书
JavaScript控制台的更多功能
2021/04/28 Javascript
在CSS中使用when/else的方法
2022/01/18 HTML / CSS