# IPC Inter-Process Communication

# 实现进程之间通信的两种机制:

# 管道 Pipe 用的很少

# 队列 Queue

队列的特征:现进先出,栈属于后进后出

基本语法:from multiprocessing import Queue

q = Queue(3) 传参数表示只允许放入3个数,不是长度,是个数

q.get() 取不到的时候会有阻塞,不会报异常,程序挂起

q.put() 存入超出范围也不会报异常

q.getnowait() 拿不到报异常

q.put_nowait() 非阻塞版本的put ,放入超出范围也会报异常

q.empty() 检测是否为空 (了解) 在一边存一边取得时候判断不准确

q.full() 检测是否已经存满 (了解) 在一边存一边取得时候判断不准确

生产者和消费者模型:

生产者和消费者模型从程序上来讲就是数据的存入和获取的过程

最为理想的生产者和消费者模型 , 两者之间的运行速度应该是同步的

  1. from multiprocessing import Process,Queue
  2. import time
  3. import random
  4. # 消费者方法 [负责取值]
  5. def consumer(q,name):
  6. while True:
  7. food = q.get()
  8. if food is None:
  9. break
  10. time.sleep(random.uniform(0.5,1))
  11. print("%s吃了一个%s" % (name,food))
  12.  
  13. # 生产者方法 [负责存值]
  14. def producer(q,name,food):
  15. for i in range(5):
  16. time.sleep(random.uniform(0.3,0.8))
  17. print("%s生产了%s" % (name,food))
  18. q.put(food+str(i))
  19.  
  20. if __name__ == "__main__":
  21. q = Queue()
  22. c1 = Process(target=consumer,args=(q,"陈露中"))
  23. c2 = Process(target=consumer,args=(q,"陈根基"))
  24. # c1.daemon = True
  25. c1.start()
  26. c2.start()
  27. p1 = Process(target=producer,args=(q,"订海呀","地瓜"))
  28. p2 = Process(target=producer,args=(q,"陈红平","黄瓜"))
  29. p1.start()
  30. p2.start()
  31.  
  32. p1.join()
  33. p2.join()
  34. q.put(None) # 添加None,让程序自动结束
  35. q.put(None)

执行结果:

  1. 订海呀生产了地瓜
  2. 陈红平生产了黄瓜
  3. 订海呀生产了地瓜
  4. 陈红平生产了黄瓜
  5. 陈根基吃了一个黄瓜0
  6. 订海呀生产了地瓜
  7. 陈露中吃了一个地瓜0
  8. 陈红平生产了黄瓜
  9. 订海呀生产了地瓜
  10. 陈根基吃了一个地瓜1
  11. 陈露中吃了一个黄瓜1
  12. 陈红平生产了黄瓜
  13. 陈红平生产了黄瓜
  14. 陈根基吃了一个地瓜2
  15. 订海呀生产了地瓜
  16. 陈露中吃了一个黄瓜2
  17. 陈根基吃了一个地瓜3
  18. 陈露中吃了一个黄瓜3
  19. 陈根基吃了一个黄瓜4
  20. 陈露中吃了一个地瓜4

(8)进程---Queue队列的更多相关文章

  1. Python之路-python(Queue队列、进程、Gevent协程、Select\Poll\Epoll异步IO与事件驱动)

    一.进程: 1.语法 2.进程间通讯 3.进程池 二.Gevent协程 三.Select\Poll\Epoll异步IO与事件驱动 一.进程: 1.语法 简单的启动线程语法 def run(name): ...

  2. Python自动化运维之16、线程、进程、协程、queue队列

    一.线程 1.什么是线程 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位. 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行 ...

  3. 进击的Python【第九章】:paramiko模块、线程与进程、各种线程锁、queue队列、生产者消费者模型

    一.paramiko模块 他是什么东西? paramiko模块是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. 先来个实例: import param ...

  4. 守护进程,互斥锁, IPC ,Queue队列,生产消费着模型

    1.守护进程 什么是守护进程? 进程是一个正在运行的程序 守护进程也是一个普通进程,意思是一个进程可以守护另一个进程,比如如果b是a的守护进程,a是被守护的进程,如果a进程结束,b进程也会随之结束. ...

  5. 多进程 multiprocessing 模块进程并发Process;Pool ;Queue队列 、threading模块;

    multiprocessing 模块中的 Process类提供了跨平台的多进程功能,在windows和linux系统都可以使用. 1.首先要实例化一个类,传入要执行的函数. 实例名 = Process ...

  6. Python Queue队列

    queue is especially useful in threaded programming when information must be exchanged safely between ...

  7. python中的Queue(队列)详解

    一.Queue简介 python中的队列分类可分为两种: 1.线程Queue,也就是普通的Queue 2.进程Queue,在多线程与多进程会介绍. Queue的种类: FIFO:  Queue.Que ...

  8. Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fabric模块

    Python第十五天  datetime模块 time模块   thread模块  threading模块  Queue队列模块  multiprocessing模块  paramiko模块  fab ...

  9. 进程同步控制(锁,信号量,事件), 进程通讯(队列和管道,生产者消费者模型) 数据共享(进程池和mutiprocess.Pool模块)

    参考博客 https://www.cnblogs.com/xiao987334176/p/9025072.html#autoid-1-1-0 进程同步(multiprocess.Lock.Semaph ...

随机推荐

  1. linux 中部署 rsync 实现文件远程备份及 同步

    客户端:数据源:服务端:数据接收方 rsync官方文档:https://www.samba.org/ftp/rsync/rsync.html 手动测试用“通过远程外壳访问"里的语法: 参考1 ...

  2. body-parser 用法

    1.下载 body-parser 模块  :   npm install body-parser 2.require body-parser 模块(引入),并用一个变量接收(此处栗子变量为 bodyp ...

  3. C++进程间通信之剪贴板

    转载:http://blog.csdn.net/hk627989388/article/details/53693636 转载:http://blog.csdn.net/heihei36/articl ...

  4. 【python40--类和对象:一些相关的BIF】

    0.如何判断一个类是否为另外一个类的子类 --使用issubclass(class,classinfo)函数,如果第一个函数(class)是第二个参数(classinfo)的一个子类,则返回Ture, ...

  5. Python3基础 e记法示例

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  6. CentOS 安装 MongoDB

    一.安装mongodb 本文介绍的安装方式是以二进制方式离线安装,相当于windows"绿色"安装版本的概念. 下载mongodb: # https://www.mongodb.c ...

  7. dp入门(LIS,LCS)

    LCS

  8. 彻底理解mysql服务器的字符集转换问题

    主要参考这三个文章: https://www.xiariboke.com/article/4147.html http://blog.sina.com.cn/s/blog_690c46500100k1 ...

  9. Miller_Rabin整理笔记

    目录 问题 别的 正事 代码 问题 一个数到底是不是素数 别的 首先列一下我们可以求素数的东西 根号暴力求 \(O(nloglogn)\)的埃氏筛 \(O(n)\)的欧拉筛 还有我们要学习的Mille ...

  10. Vue学习五:v-for指令使用方法

    本文为博主原创,未经允许不得转载: <!DOCTYPE html> <html lang="zh"> <head> <meta http- ...