python并发编程多进程 互斥锁原理解析


Posted in Python onAugust 20, 2019

运行多进程 每个子进程的内存空间是互相隔离的 进程之间数据不能共享的

互斥锁

但是进程之间都是运行在一个操作系统上,进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,

是可以的,而共享带来的是竞争,竞争带来的结果就是错乱

#并发运行,效率高,但竞争同一打印终端,带来了打印错乱
from multiprocessing import Process
import time
def task(name):
  print("%s 1" % name)
  time.sleep(1)
  print("%s 2" % name)
  time.sleep(1)
  print("%s 3" % name)
if __name__ == '__main__':
  for i in range(3):
    p = Process(target=task, args=("子进程%s" % i,))
    p.start()
'''
子进程2 1
子进程0 1
子进程1 1
子进程2 2
子进程1 2
子进程0 2
子进程2 3
子进程1 3
子进程0 3
'''

如何控制,就是加锁处理。而互斥锁的意思就是互相排斥,如果把多个进程比喻为多个人,

互斥锁的工作原理就是多个人都要去争抢同一个资源:卫生间,一个人抢到卫生间后上一把锁,其他人都要等着,等到这个完成任务后释放锁,其他人才有可能有一个抢到......

所以互斥锁的原理,就是把并发改成串行,降低了效率,但保证了数据安全,不错乱

加了互斥锁就没有并发效果了 加上锁只有一个可以运行 互斥锁会把并发变成串行 效率变低了

解决:

导入模块 Lock

现在程序启动 所有进程首先会去抢锁 只有抢到锁的才能运行

等这个进程运行完了解锁后 再到其他进程继续抢锁

from multiprocessing import Process, Lock
import time
def task(name, mutex):
  # 加锁
  mutex.acquire()
  print("%s 1" % name)
  time.sleep(1)
  print("%s 2" % name)
  time.sleep(1)
  print("%s 3" % name)
  # 把锁拆了
  mutex.release()
if __name__ == '__main__':
  # 建一个对象实例
  mutex = Lock()
  for i in range(3):
    # 把锁传给子进程 让所有子进程用同一把锁
    p = Process(target=task, args=("子进程%s" % i, mutex))
    p.start()
'''
现在程序启动 所有进程首先会去抢锁 只有抢到锁的才能运行
等这个进程运行完了解锁后 再到其他进程继续抢锁
'''
'''
子进程0 1
子进程0 2
子进程0 3
子进程1 1
子进程1 2
子进程1 3
子进程2 1
子进程2 2
子进程2 3
'''

牺牲了效率,保证数据不错乱

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
打印出python 当前全局变量和入口参数的所有属性
Jul 01 Python
python中的列表推导浅析
Apr 26 Python
Python数组条件过滤filter函数使用示例
Jul 22 Python
python和bash统计CPU利用率的方法
Jul 10 Python
使用python 打开文件并做匹配处理的实例
Jan 02 Python
Python pycharm 同时加载多个项目的方法
Jan 17 Python
python集合常见运算案例解析
Oct 17 Python
Python进程池Pool应用实例分析
Nov 27 Python
python实现从ftp服务器下载文件
Mar 03 Python
BeautifulSoup获取指定class样式的div的实现
Dec 07 Python
关于多种方式完美解决Python pip命令下载第三方库的问题
Dec 21 Python
Python采集壁纸并实现炫轮播
Apr 30 Python
django 配置阿里云OSS存储media文件的例子
Aug 20 #Python
python数据类型之间怎么转换技巧分享
Aug 20 #Python
python并发编程多进程之守护进程原理解析
Aug 20 #Python
python控制台实现tab补全和清屏的例子
Aug 20 #Python
关于python字符串方法分类详解
Aug 20 #Python
python+tkinter实现学生管理系统
Aug 20 #Python
Python对列表的操作知识点详解
Aug 20 #Python
You might like
PHP字符串长度计算 - strlen()函数使用介绍
2013/10/15 PHP
php的memcache类分享(memcache队列)
2014/03/26 PHP
php+redis实现多台服务器内网存储session并读取示例
2017/01/12 PHP
php redis实现对200w用户的即时推送
2017/03/04 PHP
ExtJS下grid的一些属性说明
2009/12/13 Javascript
jQuery新闻滚动插件 jquery.roller.js
2011/06/27 Javascript
网页打开自动最大化的js代码
2012/08/22 Javascript
webapp框架AngularUI的demo改造之路
2014/12/21 Javascript
js实现横向伸展开的二级导航菜单代码
2015/08/28 Javascript
IE9+已经不对document.createElement向下兼容的解决方法
2015/09/14 Javascript
jQuery之动画效果大全
2016/11/09 Javascript
浅谈JS读取DOM对象(标签)的自定义属性
2016/11/21 Javascript
Vue.js实现文章评论和回复评论功能
2020/05/30 Javascript
angularjs中使用ng-bind-html和ng-include的实例
2017/04/28 Javascript
Vue实战之vue登录验证的实现代码
2017/10/31 Javascript
浅谈使用mpvue开发小程序需要注意和了解的知识点
2018/05/23 Javascript
详解Vuex下Store的模块化拆分实践
2019/07/31 Javascript
jQuery实现小火箭返回顶部特效
2020/02/03 jQuery
JavaScript实现动态留言板
2020/03/16 Javascript
python模块restful使用方法实例
2013/12/10 Python
Python使用正则表达式实现文本替换的方法
2017/04/18 Python
Python利用turtle库绘制彩虹代码示例
2017/12/20 Python
wxPython的安装与使用教程
2018/08/31 Python
django 外键model的互相读取方法
2018/12/15 Python
python flask框架实现重定向功能示例
2019/07/02 Python
Boden英国官网:英国知名原创时装品牌
2018/11/06 全球购物
联想C++笔试题
2012/06/13 面试题
医学护理毕业生自荐信
2013/11/07 职场文书
酒店前厅员工辞职信
2014/01/08 职场文书
花店创业计划书范文
2014/02/07 职场文书
社区道德讲堂实施方案
2014/03/21 职场文书
出国留学担保书
2014/05/20 职场文书
让世界充满爱演讲稿
2014/05/24 职场文书
人口与计划生育责任书
2015/05/09 职场文书
MySQL七大JOIN的具体使用
2022/02/28 MySQL
Elasticsearch 数据类型及管理
2022/04/19 Python