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开发vim插件及心得分享
Nov 04 Python
Python实现将不规范的英文名字首字母大写
Nov 15 Python
Odoo中如何生成唯一不重复的序列号详解
Feb 10 Python
Python框架Flask的基本数据库操作方法分析
Jul 13 Python
Python分析彩票记录并预测中奖号码过程详解
Jul 09 Python
使用python写一个自动浏览文章的脚本实例
Dec 05 Python
opencv之为图像添加边界的方法示例
Dec 26 Python
Python查找不限层级Json数据中某个key或者value的路径方式
Feb 27 Python
Python flask框架实现查询数据库并显示数据
Jun 04 Python
python 8种必备的gui库
Aug 27 Python
Python实现自动整理文件的脚本
Dec 17 Python
Python中22个万用公式的小结
Jul 21 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经典的给图片加水印程序
2006/12/06 PHP
PHP代码优化技巧小结
2015/09/29 PHP
thinkPHP多表查询及分页功能实现方法示例
2017/07/03 PHP
PHP编程快速实现数组去重的方法详解
2017/07/22 PHP
JavaScript中的集合及效率
2010/01/08 Javascript
jquery插件之easing使用
2010/08/19 Javascript
推荐17个优美新鲜的jQuery的工具提示插件
2012/09/14 Javascript
分享JavaScript获取网页关闭与取消关闭的事件
2013/12/13 Javascript
JS实现从连接中获取youtube的key实例
2015/07/02 Javascript
jQuery仿淘宝网产品品牌隐藏与显示效果
2015/09/01 Javascript
JavaScript多并发问题如何处理
2015/10/28 Javascript
跟我学习javascript解决异步编程异常方案
2015/11/23 Javascript
JavaScript数据类型学习笔记
2016/01/25 Javascript
jQuery页面元素动态添加后绑定事件丢失方法,非 live
2016/06/16 Javascript
jQuery UI插件实现百度提词器效果
2016/11/21 Javascript
JavaScript 数据类型详解
2017/03/13 Javascript
Laravel整合Bootstrap 4的完整方案(推荐)
2018/01/25 Javascript
如何编写一个d.ts文件的步骤详解
2018/04/13 Javascript
微信小程序实现红包雨功能
2018/07/11 Javascript
使用vuepress搭建静态博客的示例代码
2019/02/14 Javascript
Express结合Webpack的全栈自动刷新
2019/05/23 Javascript
JavaScript实现移动端带transition动画的轮播效果
2020/03/24 Javascript
在Vue中使用Echarts可视化库的完整步骤记录
2020/11/18 Vue.js
Python计算一个给定时间点前一个月和后一个月第一天的方法
2018/05/29 Python
Python3实现飞机大战游戏
2020/04/24 Python
深入理解HTML的FormData对象
2016/05/17 HTML / CSS
BSTN意大利:德国街头和运动文化高品质商店
2020/12/22 全球购物
城市轨道专业个人求职信范文
2013/09/23 职场文书
中专生自荐信
2013/10/12 职场文书
经理秘书找工作求职信
2013/12/19 职场文书
单位消防安全制度
2014/01/12 职场文书
校园创业策划书
2014/01/14 职场文书
软件项目开发计划书
2014/05/01 职场文书
试用期转正后的自我评价
2014/09/21 职场文书
2014国庆65周年领导讲话稿(3篇)
2014/09/21 职场文书
创业计划书之面包店
2019/09/17 职场文书