# 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() 检测是否已经存满 (了解) 在一边存一边取得时候判断不准确

生产者和消费者模型:

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

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

from multiprocessing import Process,Queue
import time
import random
# 消费者方法 [负责取值]
def consumer(q,name):
while True:
food = q.get()
if food is None:
break
time.sleep(random.uniform(0.5,1))
print("%s吃了一个%s" % (name,food)) # 生产者方法 [负责存值]
def producer(q,name,food):
for i in range(5):
time.sleep(random.uniform(0.3,0.8))
print("%s生产了%s" % (name,food))
q.put(food+str(i)) if __name__ == "__main__":
q = Queue()
c1 = Process(target=consumer,args=(q,"陈露中"))
c2 = Process(target=consumer,args=(q,"陈根基"))
# c1.daemon = True
c1.start()
c2.start()
p1 = Process(target=producer,args=(q,"订海呀","地瓜"))
p2 = Process(target=producer,args=(q,"陈红平","黄瓜"))
p1.start()
p2.start() p1.join()
p2.join()
q.put(None) # 添加None,让程序自动结束
q.put(None)

执行结果:

订海呀生产了地瓜
陈红平生产了黄瓜
订海呀生产了地瓜
陈红平生产了黄瓜
陈根基吃了一个黄瓜0
订海呀生产了地瓜
陈露中吃了一个地瓜0
陈红平生产了黄瓜
订海呀生产了地瓜
陈根基吃了一个地瓜1
陈露中吃了一个黄瓜1
陈红平生产了黄瓜
陈红平生产了黄瓜
陈根基吃了一个地瓜2
订海呀生产了地瓜
陈露中吃了一个黄瓜2
陈根基吃了一个地瓜3
陈露中吃了一个黄瓜3
陈根基吃了一个黄瓜4
陈露中吃了一个地瓜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. 利用JQuery Mobile开发web app

    什么是web app web app 是基于web的应用程序,是针对移动设备优化后的web站点,它具有 开发成本低——采用web开发技术,不需要考虑跨平台以及底层适配问题: 升级简单——不需要通知用户 ...

  2. es数据迁移脚本(python)

    #!/usr/bin/python # -*- coding: UTF-8 -*- # 文件名:indiceCreate.py import sys import base64 import time ...

  3. luogu 3790 文艺数学题 - 矩阵树定理 - 容斥原理

    题目传送门 戳我来传送 题目大意 给定一个图,问它的所有生成树的边权的最大公约数之和. 可以考虑计算边权的最大公约数为$i$的生成树的个数$f(i)$,最后累加答案. 然后考虑这样的生成树的个数怎么求 ...

  4. git download error processing

    git clone git@github.com:happyfish100/fastdfs.git 提示下列信息: Warning: Permanently added 'github.com,192 ...

  5. 新建一个Windows Service的方法

    http://www.cnblogs.com/YanPSun/archive/2010/05/22/1741381.html http://blog.csdn.net/m15188153014/art ...

  6. android 6 中init.rc的生成过程【转】

    本文转载自:https://blog.csdn.net/quhj/article/details/51819638 android 系统开机是会有一个初始化过程 init ,整个初始化过程是根据配置脚 ...

  7. R read.tabe line 5 did not have 2 elements

    R read.tabe  line 5 did not have 2 elements Reason: there are special characters such as # in file o ...

  8. AtCoder Beginner Contest 120 解题报告

    为啥最近都没有arc啊... A - Favorite Sound #include <algorithm> #include <iostream> #include < ...

  9. parent获取子元素以及自身元素

    innerHTML 设置或获取位于对象起始和结束标签内的 HTML outerHTML 设置或获取对象及其内容的 HTML 形式 innerText 设置或获取位于对象起始和结束标签内的文本 oute ...

  10. echarts获取数据的一些难点1

    像上面获取数据后,如果再根据下方按钮查询不同获取的价格,虽然曲线价格能按照不同的来展示, 但是问题有: 查询到的company字段虽然在获取的data中能测试出,但是在上方填入这些companys后, ...