1.队列的使用: 队列引用的前提: 多个进程对同一块共享数据的修改:要从硬盘读文件,慢,还要考虑上锁: 所以就出现了 队列 和 管道 都在内存中(快): 队列 = 管道 + 上锁 用队列的目的: 进程间通信(IPC),队列可以放任意类型的数据,应该放小东西, q = Queue(3) get put full empty 队列作用: 多个进程之间通信使用的,一个进程将数据放到队列里面,另外一个进程从队列里面取走数据,干的是进程之间通信的活 from multiprocessing import…
一,互斥锁,同步锁 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的, 竞争带来的结果就是错乱,如何控制,就是加锁处理 part1:多个进程共享同一打印终端 #并发运行,效率高,但竞争同一打印终端,带来了打印错乱 from multiprocessing import Process import os,time def work(): print('%s is running' %os.getpid()) time.sleep(2) print('…
一,互斥锁,同步锁 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的, 竞争带来的结果就是错乱,如何控制,就是加锁处理 part1:多个进程共享同一打印终端 #并发运行,效率高,但竞争同一打印终端,带来了打印错乱 from multiprocessing import Process import os,time def work(): print('%s is running' %os.getpid()) time.sleep(2) print('…
进程部分 一:进程间通信IPC机制:由于进程之间的内存空间是相互隔离的,所以为了进程间的通信需要一个共享的内存空间, 但是共享带来的问题是数据在写的时候就不安全了,所以需要一种机制既有能共享的内存 空间,又能解决锁的问题. 有两种解决方案:一种叫管道,另一种叫队列.其中队列就是管道加锁实现的.这两种方式 占用的都是内存空间,但是管道无法解决锁的问题,所以还是要选择队列.例图1: 二:生产者消费者模型: 1:什么是生产者消费者模型: 生产者:代指生产数据的任务 消费者:代指处理数据的任务 该模型的…
目录 进程池线程池的使用***** 进程池/线程池的创建和提交回调 验证复用池子里的线程或进程 异步回调机制 通过闭包给回调函数添加额外参数(扩展) 协程*** 概念回顾(协程这里再理一下) 如何实现协程 生成器的yield 可以实现保存状态(行不通) gevent模块实现 利用gevent在单线程下实现并发(协程) I/O 模型(只放了几张图) 阻塞I/O模型 非阻塞I/O模型 多路复用I/O模型 信号驱动I/O模型 异步I/O模型 进程池线程池的使用***** 无论是开线程还是开进程都会消耗…
昨日内容回顾 操作系统发展史 1.穿孔卡片 CPU利用率极低 2.联机批处理系统 CPU效率有所提升 3.脱机批处理系统 CPU效率极大提升(现代计算机雏形) 多道技术(单核CPU) 串行:多个任务依次排队执行 多道:切换+保存状态 进程理论 程序与进程的区别 程序是死的进程是活的 进程的调度算法 先来先服务 短作业优先 时间片轮转法+多级反馈队列 进程的三状态 就绪态 运行态 阻塞态(只有经过就绪态的进程才能进入运行态) 任务的提交方式 同步:提交完任务之后原地等待任务的结果 期间不做任何事情…
一.什么是生产者消费者模型 生产者指的是生产数据的任务,消费者指的是处理数据的任务,在并发编程中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能继续生产数据.同样的道理,如果消费者的处理能力大于生产者,那么消费者就必须等待生产者.为了解决这个问题于是引入了生产者和消费者模式. 该模型的工作方式:生产者生产数据传递给消费者处理 实现方式:生产者 ---> 队列 <--- 消费者 二.为何要使用生产者消费者模型 当程序中出现明显的两类任务,一类负责生产数据,一…
1.守护进程(了解)2.进程安全(*****) 互斥锁 抢票案例3.IPC进程间通讯 manager queue(*****)4.生产者消费者模型 守护进程 指的也是一个进程,可以守护着另一个进程 一个进程a 设置为b的守护进程 当b结束时 a会立马结束自己 不管任务是否执行完毕 使用场景: 例如qq进程 有一个下载任务 交给了一个子进程 但是过程中 qq退出了 下载进程也可以随之关闭了 *** p.daemon=True 将p子进程设置为主进程的守护进程 必须放在开启进程之前设置*** 进程安…
进程同步: 1. 锁 (重点)    锁通常被用来实现对共享资源的同步访问.为每一个共享资源创建一个Lock对象,当你需要访问该资源时,调用acquire方法来获取锁对象(如果其它线程已经获得了该锁,则当前线程需等待其被释放),待资源访问完后,再调用release方法释放锁 Lock  先异步, 到共同区域的时候同步, 一次只能有一个进程执行加锁的程序, 避免错乱.  由并发变成串行, 牺牲效率, 保证了数据的安全. import json from multiprocessing import…
研究了下multiprocessing.managers,略有收获,随笔一篇: 核心思路是构造一个manager进程,这个进程可以通过unix socket或tcp socket与其它进程通信:因为利用了socket,所以通信的进程间不要求具备父子关系,甚至可以跨主机(通过tcp socket): 通过manager进行数据结构共享,可以应用于很多的IPC场景:这里只做一个示例,在manager内维护一个队列,做为生产者消费者模型中的消息队列: # coding:utf-8 import os…