实例1:消息队列Queue,不要将文件命名为“queue.py”,否则会报异常“ImportError:
cannot import name 'Queue'”

#coding=utf-8
from multiprocessing import Queue q = Queue(3)#初始化一个Queue对象,最多可接收三条put消息
q.put('message-1')
q.put('message-2')
print(q.full())#False,是否满了
q.put('message-3')
print(q.full())#True #因为消息队列已满,下面的try都会抛出异常,第一个try会等待2秒后再抛出异常,第二个try会立即抛出异常
try:
q.put('message-4',True,2)
except:
print('except1,消息队列已满,现有消息数量:%s'%q.qsize()) try:
q.put_nowait('message-4')
except:
print('except2,消息队列已满,现有消息数量:%s'%q.qsize()) #判断队列是否已满
if not q.full():
q.put_nowait('message-4') #读取消息时,先判断消息队列是否为空,在读取
if not q.empty():
for i in range(q.qsize()):
print(q.get())#q.get会阻塞,q.get_nowait()不阻塞,但会抛异常

False

True

except1,消息队列已满,现有消息数量:3

except2,消息队列已满,现有消息数量:3

message-1

message-2

message-3

实例二:通过Process进程间通信


from multiprocessing import Process,Queue
import os,time,random #写数据
def write(q):
for value in ['A','B','C']:
print('Put %s to queue...'%value)
q.put(value)
time.sleep(random.random()) #读数据
def read(q):
while True:
if not q.empty():
value = q.get(True)
print('Get %s from queue...'%value)
time.sleep(random.random())
else:
break if __name__ == '__main__':
print('start...')
q = Queue()
#父进程的queue传递给子进程
pw = Process(target=write,args=(q,))
pr = Process(target=read,args=(q,))
#写进程
pw.start()
pw.join()
#读进程
pr.start()
pr.join()
print('done...')

start...

Put A to queue...

Put B to queue...

Put C to queue...

Get A from queue...

Get B from queue...

Get C from queue...

done...

实例三:通过Manager进程间通信

from multiprocessing import Manager,Pool
import os,time,random #写数据
def writer(q):
print('writer启动(%s),父进程为(%s)'%(os.getpid(),os.getppid()))
for i in 'chaoge':
q.put(i) #读数据
def reader(q):
print('reader启动(%s),父进程为(%s)'%(os.getpid(),os.getppid()))
for i in range(q.qsize()):
print('reader 从Queue获取到消息:%s'%q.get()) if __name__ == '__main__':
print('(%s) start'%os.getpid())
q = Manager().Queue()#使用Manager中的Queue来初始化
po=Pool()
#使用阻塞模式创建进程,这样就不需要再reader中使用死循环了,可以等write执行完成后,再用reader
po.apply(writer,(q,))
po.apply(reader,(q,))
#写进程
po.close()
po.join()
print('(%s) End'%os.getpid())

(7720) start

writer启动(7284),父进程为(7720)

reader启动(8712),父进程为(7720)

reader 从Queue获取到消息:c

reader 从Queue获取到消息:h

reader 从Queue获取到消息:a

reader 从Queue获取到消息:o

reader 从Queue获取到消息:g

reader 从Queue获取到消息:e

(7720) End

python消息队列Queue的更多相关文章

  1. Python进阶【第二篇】多线程、消息队列queue

    1.Python多线程.多进程 目的提高并发 1.一个应用程序,可以有多进程和多线程 2.默认:单进程,单线程 3.单进程,多线程 IO操作,不占用CPU python的多线程:IO操作,多线程提供并 ...

  2. 消息队列Queue大全

    消息队列Queue大全 (http://queues.io/) 作业队列,消息队列和其他队列.几乎所有你能想到的都在这. 关于 那里有很多排队系统.他们每个人都不同,是为解决某些问题而创建的.这个页面 ...

  3. Python消息队列工具 Python-rq 中文教程

    原创文章,作者:Damon付,如若转载,请注明出处:<Python消息队列工具 Python-rq 中文教程>http://www.tiangr.com/python-xiao-xi-du ...

  4. python消息队列snakemq使用总结

    Python 消息队列snakemq总结 最近学习消息总线zeromq,在网上搜了python实现的消息总线模块,意外发现有个消息队列snakemq,于是拿来研究一下,感觉还是很不错的,入手简单使用也 ...

  5. 消息队列queue

    一.queue 在多线程编程中,程序的解耦往往是一个麻烦的问题,以及在socket网络编程中也会有这样的问题.recv 和send之间,如果服务端有消息,问题需要发送给客户端,而那边的recv 被主程 ...

  6. Python 单向队列Queue模块详解

    Python 单向队列Queue模块详解 单向队列Queue,先进先出 '''A multi-producer, multi-consumer queue.''' try: import thread ...

  7. python多进程之间的通信:消息队列Queue

    python中进程的通信:消息队列. 我们知道进程是互相独立的,各自运行在自己独立的内存空间. 所以进程之间不共享任何变量. 我们要想进程之间互相通信,传送一些东西怎么办? 需要用到消息队列!! 进程 ...

  8. Python消息队列(RabbitMQ)

    RabbitMQ 即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用.可维护多个队列,可实现消息的一对一和广播等方式发送 RabbitMQ是一个开源的AMQP实现 ...

  9. python - 消息队列

    消息队列分类 1.先进先出 2.后进先出 3.优先级队列 4.双向队列 1.先进先出 import queue q = queue.Queue(2) #队列最大长度 q.put(11) q.put(2 ...

随机推荐

  1. C#关键字as出现的错误

    ObjectCache cache = MemoryCache.Default; string cacheData1 = cache["key1"] as string;//得不到 ...

  2. yii 定义场景

    定义场景可以限制对字段的增删改查操作

  3. Vue生命周期,计算属性、方法、侦听器

    vue实例和组件都有生命周期函数,beforeCreate()实例或组件没有被创建的时候执行的钩子函数:created()是实例或组件被创建完成的时候执行的钩子函 数:beforeMount()函数是 ...

  4. Unity3D中的Quality

    Quality Level:质量等级,默认为打包最低的那个等级 Name:质量级别的名称 Pixel Light Count:像素灯数量(前向渲染使用的像素灯的最大数量) Texture Qualit ...

  5. EHR ORA--1187由于验主频雘失败而无法从文件读取 ORA-01110数据文件temp01.dbf

    alter tablespace TEMP add tempfile '/data/oracle/oradata/orcl/temp02.dbf' size 100m autoextend on; a ...

  6. jvm参考网页

    --------------------------------------------- https://www.e-learn.cn/content/wangluowenzhang/37475 h ...

  7. php 读取网站页面源码的经典函数

    Snoopy.class.php下载 include "inc/Snoopy.class.php"; //读取网页,返回网页源文件内容 function read_url($str ...

  8. js实现右击

    <!DOCTYPE html> <html>     <head>  <meta charset="UTF-8">  <tit ...

  9. vue 给v-html中的元素设置样式

    解决方案:写样式的时候添加>>>

  10. HRBUST 2310 Tree Painting(无向图欧拉路径的性质)

    Give you a tree, can you draw the tree with minimum strokes without overlapping? Noted that it is ok ...