生产者剩余

day 31-1 守护进程、互斥锁、队列、生产消费模型

二次信任 提交于 2020-02-17 01:14:58
守护进程 关于守护进程需要强调两点 其一:守护进程会在主进程代码执行结束后就终止 其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemonic processes are not allowed to have children from multiprocessing import Process import time def foo(): pass def run(): print('this is 子进程') time.sleep(3) p1 = Process(target=foo,) # AssertionError: daemonic processes are not allowed to have children p1.start() if __name__ == '__main__': p = Process(target=run,) p.daemon = True # 守护进程要主进程执行完毕前开启 p.start() p.join() print('主进程') 互斥锁 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的,而共享带来的是竞争,竞争带来的结果就是错乱, 主要参数: from multiprocessing import Process, Lock  

队列与生产者消费者模型

不想你离开。 提交于 2019-11-29 19:14:53
目录 一、队列 二、消费者生产者模型 什么是生产者消费者模式 为什么要使用生产者和消费者模式 基于队列(Queue)实现生产者消费者模型 生产者消费者模型总结 一、队列 ​ 进程彼此之间互相隔离,要实现进程间通信(IPC),multiprocessing模块支持两种形式:队列和管道,这两种方式都是使用消息传递的 创建队列的类(底层就是以管道和锁定的方式实现) : 1 Queue([maxsize]):创建共享的进程队列,Queue是多进程安全的队列,可以使用Queue实现多进程之间的数据传递。 **参数介绍:** 1 maxsize是队列中允许最大项数,省略则无大小限制。 方法介绍 1 q.put方法用以插入数据到队列中,put方法还有两个可选参数:blocked和timeout。如果blocked为True(默认值),并且timeout为正值,该方法会阻塞timeout指定的时间,直到该队列有剩余的空间。如果超时,会抛出Queue.Full异常。如果blocked为False,但该Queue已满,会立即抛出Queue.Full异常。 2 q.get方法可以从队列读取并且删除一个元素。同样,get方法有两个可选参数:blocked和timeout。如果blocked为True(默认值),并且timeout为正值,那么在等待时间内没有取到任何元素,会抛出Queue.Empty异常