1、作用:进程之间的数据交互

2、常用方法

"""
对象.put()
作用:放入队列一个数据
对象.get()
作用:取队列一个数据,若队列没有值,则阻塞
对象.empty()
作用:判断队列是否为空
对象.full()
作用:判断队列是否为满 """

3、例子

"""
子进程Process-1 和 子进程Process-2进行数据传输
"""
from multiprocessing import Queue
from multiprocessing import Process def new_put(q):
q.put('你好') def new_get(q):
ret = q.get()
print(ret) if __name__ == '__main__':
q = Queue()
p = Process(target=new_put, args=(q, ))
p.start()
print(p.name)
g = Process(target=new_get, args=(q, ))
g.start()
print(g.name)

4、生产者消费者模型

import time
import random
from multiprocessing import Process
from multiprocessing import Queue def producer(name, food, q):
for i in range(6):
f = '%s生产%s%s' % (name,food, i)
print(f)
time.sleep(random.randint(1, 3))
q.put(f) def consumer(name, q):
while 1:
f1 = q.get()
if f1 is None:
break
f = '********************%s吃%s' % (name, f1)
print(f)
time.sleep(random.randint(1, 2)) if __name__ == '__main__':
q = Queue()
p = Process(target=producer, args=('tom', '包子', q))
p.start()
p2 = Process(target=producer, args=('joker', '馒头', q))
p2.start()
c1 = Process(target=consumer, args=('wt', q))
c1.start()
c2 = Process(target=consumer, args=('son', q))
c2.start()
p.join()
p2.join()
q.put(None)
q.put(None)

优化

import time
import random
from multiprocessing import Process
from multiprocessing import JoinableQueue def producer(name, food, q):
for i in range(6):
f = '%s生产%s%s' % (name,food, i)
print(f)
time.sleep(random.randint(1, 3))
q.put(f)
q.join() def consumer(name, q):
while 1:
f1 = q.get()
f = '********************%s吃%s' % (name, f1)
print(f)
time.sleep(random.randint(1, 2))
q.task_done() if __name__ == '__main__':
q = JoinableQueue() p = Process(target=producer, args=('tom', '包子', q))
p.start()
p2 = Process(target=producer, args=('joker', '馒头', q))
p2.start()
c1 = Process(target=consumer, args=('wt', q))
c1.daemon = True
c1.start()
c2 = Process(target=consumer, args=('son', q))
c2.daemon = True
c2.start()
p.join()
p2.join()

过程:主进程等待->生产者进程,生产者等待->消费者
p.join()->q.join()->c,task_down()
obj.join()
作用:阻塞,直到队列里的所有值被处理,一般在生产者进程中和put()方法一起使用
obj.task_down()
作用:向q.join()发送信号量,表名q.get()的值,已经被处理
注意:给消费者设置守护进程,队列的数据处理完毕后,消费者再执行下去,没有意义

python 进程Queue的更多相关文章

  1. Python开发【笔记】:what?进程queue还能生产出线程!

    进程queue底层用线程传输数据 import threading import multiprocessing def main(): queue = multiprocessing.Queue() ...

  2. python 进程和线程

    python中的进程.线程(threading.multiprocessing.Queue.subprocess) Python中的进程与线程 学习知识,我们不但要知其然,还是知其所以然.你做到了你就 ...

  3. Python 进程

    安装Python的paramiko模块 步骤: 1:管理员方式打开cmd,切换到python安装路径的Scripts目录下: 2:执行命令: 1 pip3.5.exe install paramiko ...

  4. python进程、线程、协程(转载)

    python 线程与进程简介 进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资 ...

  5. Python进程、线程、协程详解

    进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分配.任务的调度. ...

  6. python——进程、线程、协程

    Python线程 Threading用于提供线程相关的操作,线程是应用程序中工作的最小单元. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #!/usr/bin/env pytho ...

  7. Python 进程之间共享数据

    最近遇到多进程共享数据的问题,到网上查了有几篇博客写的蛮好的,记录下来方便以后查看. 一.Python multiprocessing 跨进程对象共享  在mp库当中,跨进程对象共享有三种方式,第一种 ...

  8. Python 进程间数据交互

    进程间通信:进程之间必须需要中间件. 不同进程间内存是不共享的,要想实现两个进程间的数据交换     Queues:实现传输两个进程的数据 线程queue,访问数据只能在一个进程内进行线程与线程之间的 ...

  9. Python中Queue模块及多线程使用

    Python的Queue模块提供一种适用于多线程编程的FIFO实现.它可用于在生产者(producer)和消费者(consumer)之间线程安全(thread-safe)地传递消息或其它数据,因此多个 ...

随机推荐

  1. P1013 高精度加法

    题目描述 给你两个很大的正整数A和B,你需要计算他们的和. 输入格式 输入一行包含两个正整数A和B,以一个空格分隔(A和B的位数都不超过 \(10^5\)) 输出格式 输出一行包含一个整数,表示A+B ...

  2. MySQL Workbench: mysqldump version mismatch

    Windows10 64bit系统下,步骤就是: Edit --> preferences --> Administrator --> Path to mysqldump tool: ...

  3. oracle中update语句修改多个字段

    如需要修改下列数据:表名为student 一般会这样写: update student set sname = '李四', sage = 20, sbirthday = to_date('2010-0 ...

  4. 学习Java第三周

    这是学习java的第三周 上周想要学习的这周也完成了,研究和测试代码花费了大约2个小时,发现这些内容方法居多,想要熟练掌握就要好好记忆了 包装类 数字处理类 Object类 Java类包 内部类 下一 ...

  5. tcp短连接和长连接

    1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次 ...

  6. 理解C/C++的复杂声明

      理解C/C++的复杂声明        曾经碰到过让你迷惑不解.类似于int * (* (*fp1) (int) ) [10];这样的变量声明吗?本文将由易到难,一步一步教会你如何理解这种复C/C ...

  7. git之github推送篇

    1.创建项目  2.生成ssh密钥并设置到github 在文件夹里面右键打开git命令行,输入下面命令,然后一直回车. ssh-keygen -t rsa 生成位置在当前用户的.ssh文件夹里,带pu ...

  8. javaweb-实现不同用户登录后跳转到不同界面

    今天下午,实现了公文流转系统的一小部分——登录界面验证不同用户跳转到不同界面 Dao package com.office.Dao; import java.sql.Connection; impor ...

  9. 深入ThreadLocal的底层实现机制以及对应的使用风险

    学习Java中常用的开源框架,Mybatis.Hibernate中线程通过数据库连接对象Connection,对其数据进行操作,都会使用ThreadLocal类来保证Java多线程程序访问和数据库数据 ...

  10. Java提供的JDBC标准- 六大步骤

    JDBC 1.//加载驱动 class.forname 2.//创建连接connection 3.//创建 管道流 statement或  preparestatement预处理4.//执行sql语句 ...