python消息队列Queue
实例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的更多相关文章
- Python进阶【第二篇】多线程、消息队列queue
1.Python多线程.多进程 目的提高并发 1.一个应用程序,可以有多进程和多线程 2.默认:单进程,单线程 3.单进程,多线程 IO操作,不占用CPU python的多线程:IO操作,多线程提供并 ...
- 消息队列Queue大全
消息队列Queue大全 (http://queues.io/) 作业队列,消息队列和其他队列.几乎所有你能想到的都在这. 关于 那里有很多排队系统.他们每个人都不同,是为解决某些问题而创建的.这个页面 ...
- Python消息队列工具 Python-rq 中文教程
原创文章,作者:Damon付,如若转载,请注明出处:<Python消息队列工具 Python-rq 中文教程>http://www.tiangr.com/python-xiao-xi-du ...
- python消息队列snakemq使用总结
Python 消息队列snakemq总结 最近学习消息总线zeromq,在网上搜了python实现的消息总线模块,意外发现有个消息队列snakemq,于是拿来研究一下,感觉还是很不错的,入手简单使用也 ...
- 消息队列queue
一.queue 在多线程编程中,程序的解耦往往是一个麻烦的问题,以及在socket网络编程中也会有这样的问题.recv 和send之间,如果服务端有消息,问题需要发送给客户端,而那边的recv 被主程 ...
- Python 单向队列Queue模块详解
Python 单向队列Queue模块详解 单向队列Queue,先进先出 '''A multi-producer, multi-consumer queue.''' try: import thread ...
- python多进程之间的通信:消息队列Queue
python中进程的通信:消息队列. 我们知道进程是互相独立的,各自运行在自己独立的内存空间. 所以进程之间不共享任何变量. 我们要想进程之间互相通信,传送一些东西怎么办? 需要用到消息队列!! 进程 ...
- Python消息队列(RabbitMQ)
RabbitMQ 即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用.可维护多个队列,可实现消息的一对一和广播等方式发送 RabbitMQ是一个开源的AMQP实现 ...
- python - 消息队列
消息队列分类 1.先进先出 2.后进先出 3.优先级队列 4.双向队列 1.先进先出 import queue q = queue.Queue(2) #队列最大长度 q.put(11) q.put(2 ...
随机推荐
- Module build failed: Error: Cannot find module 'url-loader' 的坑
本文地址:http://www.cnblogs.com/jying/p/8280956.html 开发环境:react.webpack.es5 引用图片报错:Module build failed: ...
- 创建maven项目前的准备工作
第二步: 在maven中的settings.xml文件中指定 2.1 本地仓库:计算机中一个文件夹,自己定义是哪个文件夹. 2.1 示例语法 <localRepository>D:/mav ...
- /src/applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- 移植ok6410 LCD驱动
1.本次移植过程选择 linux-2.6.28 lcd驱动为参考移植到 linux-2.6.34 ok6410 开发板上. 2.移植过程 主要以给内核增加驱动的思想,在/driver/video/ 下 ...
- prompt
[prompt] prompt() 方法用于显示可提示用户进行输入的对话框. prompt(text,defaultText) 参数 描述 text 可选.要在对话框中显示的纯文本(而不是 HTML ...
- backdoor-factory
启动backdoor-factory 寻找大于100字节的代码洞 执行的结果 查看适合的payload程序 iat_reverse_tcp_stager_threaded分片段注入方式 使用这种注入方 ...
- python 进阶(转自http://python.jobbole.com/82633/)
网络 通用 urllib -网络库(stdlib). requests -网络库. grab – 网络库(基于pycurl). pycurl – 网络库(绑定libcurl). urllib3 – P ...
- Appium1.6 定位iOS元素和操作元素
元素定位方式 第一种:通过Appium1.6的Inspector来查看 具体安装方式前面的随笔已经介绍了:http://www.cnblogs.com/meitian/p/7360017.html ...
- 强制改变css样式优先级
.list{ left:20px!important; } css !important作用是提高指定CSS样式规则的应用优先权. !important是CSS1就定义的语法,作用是提高指定样式规则的 ...
- GIT 命令集
Git图形化界面 下面是我整理的常用 Git 命令清单.几个专用名词的译名如下. Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remot ...