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搭建Django应用程序步骤及版本冲突问题解决
Nov 19 Python
Python标准库之多进程(multiprocessing包)介绍
Nov 25 Python
Python 中的with关键字使用详解
Sep 11 Python
Flask框架Jinjia模板常用语法总结
Jul 19 Python
pandas每次多Sheet写入文件的方法
Dec 10 Python
Appium Python自动化测试之环境搭建的步骤
Jan 23 Python
简单了解python高阶函数map/reduce
Jun 28 Python
解决Django中多条件查询的问题
Jul 18 Python
python实现广度优先搜索过程解析
Oct 19 Python
PyTorch实现AlexNet示例
Jan 14 Python
Python参数传递实现过程及原理详解
May 14 Python
浅析Python 中的 WSGI 接口和 WSGI 服务的运行
Dec 09 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取整函数:ceil,floor,round,intval的区别详细解析
2013/08/31 PHP
PHP字符串中特殊符号的过滤方法介绍
2014/02/18 PHP
4种PHP异步执行的常用方式
2015/12/24 PHP
jQuery 常见学习网站与参考书
2009/11/09 Javascript
JavaScript中的property和attribute介绍
2011/12/26 Javascript
jQuery随机切换图片的小例子
2013/04/18 Javascript
利用NodeJS和PhantomJS抓取网站页面信息以及网站截图
2013/11/18 NodeJs
Javascript setInterval的两种调用方法(实例讲解)
2013/11/29 Javascript
JavaScript将字符串转换为整数的方法
2015/04/14 Javascript
JavaScript对数组进行随机重排的方法
2015/07/22 Javascript
JS实现下拉菜单赋值到文本框的方法
2015/08/18 Javascript
jQuery获取及设置表单input各种类型值的方法小结
2016/05/24 Javascript
移动端触屏幻灯片图片切换插件idangerous swiper.js
2017/04/10 Javascript
JS实现的杨辉三角【帕斯卡三角形】算法示例
2019/02/26 Javascript
Python 判断 有向图 是否有环的实例讲解
2018/02/01 Python
对python 判断数字是否小于0的方法详解
2019/01/26 Python
python 并发编程 非阻塞IO模型原理解析
2019/08/20 Python
python实现FTP文件传输的方法(服务器端和客户端)
2020/03/20 Python
python删除某个目录文件夹的方法
2020/05/26 Python
image-set实现Retina屏幕下图片显示详细介绍
2012/12/24 HTML / CSS
德购商城:德国进口直邮商城
2017/06/13 全球购物
欧洲最大的滑雪假期供应商之一:Sunweb Holidays
2018/01/06 全球购物
莫斯科制造商的廉价皮大衣:Fursk
2020/06/09 全球购物
Ibatis中如何提高SQL Map的性能
2013/05/11 面试题
毕业生简单求职信
2013/11/19 职场文书
小学毕业感言150字
2014/02/05 职场文书
行政部工作岗位职责范本
2014/03/05 职场文书
小学数学课后反思
2014/04/23 职场文书
厨师长岗位职责范本
2014/08/25 职场文书
2015年招聘工作总结
2014/12/12 职场文书
大学生创业事迹材料
2014/12/30 职场文书
高考作弊检讨书1500字
2015/02/16 职场文书
写给老婆的保证书
2015/02/27 职场文书
锦旗赠语
2015/06/23 职场文书
Nginx域名转发https访问的实现
2021/03/31 Servers
Nginx虚拟主机的搭建的实现步骤
2022/01/18 Servers