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之眼花缭乱的运算符
Sep 14 Python
跟老齐学Python之从格式化表达式到方法
Sep 28 Python
python爬虫爬取淘宝商品信息(selenum+phontomjs)
Feb 24 Python
python实现大转盘抽奖效果
Jan 22 Python
我用Python抓取了7000 多本电子书案例详解
Mar 25 Python
python取余运算符知识点详解
Jun 27 Python
python对象销毁实例(垃圾回收)
Jan 16 Python
python+selenium+Chrome options参数的使用
Mar 18 Python
Python使用matplotlib绘制圆形代码实例
May 27 Python
python的help函数如何使用
Jun 11 Python
python爬取网易云音乐热歌榜实例代码
Aug 07 Python
详解python的内存分配机制
May 10 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处理图片变得简单 基于gb库的图片处理类附实例代码下载
2011/05/17 PHP
php的array_multisort()使用方法介绍
2012/05/16 PHP
ThinkPHP多表联合查询的常用方法
2020/03/24 PHP
php实现构建排除当前元素的乘积数组方法
2018/10/06 PHP
laravel5.5添加echarts实现画图功能的方法
2019/10/09 PHP
犀利的js 函数集合
2009/06/11 Javascript
js数据验证集合、js email验证、js url验证、js长度验证、js数字验证等简单封装
2010/05/15 Javascript
jquery事件与函数的使用介绍
2013/09/29 Javascript
jQuery操作Select的Option上下移动及移除添加等等
2013/11/18 Javascript
js实现可得到不同颜色值的颜色选择器实例
2015/02/28 Javascript
JSON简介以及用法汇总
2016/02/21 Javascript
类似于QQ的右滑删除效果的实现方法
2016/10/16 Javascript
使用开源工具制作网页验证码的方法
2016/10/17 Javascript
利用vue.js插入dom节点的方法
2017/03/15 Javascript
详解tween.js 中文使用指南
2018/01/05 Javascript
Vue打包后出现一些map文件的解决方法
2018/02/13 Javascript
vue使用codemirror的两种用法
2019/08/27 Javascript
javascript二维数组和对象的深拷贝与浅拷贝实例分析
2019/10/26 Javascript
vue video和vue-video-player实现视频铺满教程
2020/10/30 Javascript
Python中tell()方法的使用详解
2015/05/24 Python
Python实现的多线程同步与互斥锁功能示例
2017/11/30 Python
python按修改时间顺序排列文件的实例代码
2019/07/25 Python
python中eval与int的区别浅析
2019/08/11 Python
解决pycharm中opencv-python导入cv2后无法自动补全的问题(不用作任何文件上的修改)
2020/03/05 Python
天巡全球:Skyscanner Global
2017/06/20 全球购物
戴森台湾线上商城:Dyson Taiwan
2018/05/21 全球购物
澳大利亚足球鞋和服装购物网站:Ultra Football
2018/10/11 全球购物
2014年三八妇女节活动总结
2014/03/01 职场文书
前台文员职责范本
2014/03/07 职场文书
综艺节目策划方案
2014/06/13 职场文书
2014年妇联工作总结
2014/11/21 职场文书
自主招生自荐信格式
2015/03/04 职场文书
遗失证明范文
2015/06/19 职场文书
Nginx 502 Bad Gateway错误原因及解决方案
2021/03/31 Servers
自从在 IDEA 中用了热部署神器 JRebel 之后,开发效率提升了 10(真棒)
2021/06/26 Java/Android
python+opencv实现目标跟踪过程
2022/06/21 Python