python_并发编程——队列
1.队列
from multiprocessing import Queue q = Queue(5) #创建队列对象,队列大小为5,队列中只能存放5个元素
q.put(1) #往队列中添加元素
q.put(2)
q.put(3)
q.put(4)
q.put(5)
print(q.full()) #检测队列是否满了~
print(q.get()) #取出队列中的值
print(q.get())
print(q.get())
print(q.get())
print(q.get())
print(q.empty()) #检测队列是否为空
结果:
如果队列中的值满了,继续用put()方法往队列中添加元素,则会阻塞,
如果队列为空,继续用get()方法取队列中的元素,同样也会阻塞。
get_nowait()方法:
返回q中的一个项,如果q为空此方法则阻塞,知道队列中有项目可以用为止。用于控制阻塞行为,默认为True,如果设置为False,将引发Queue.Empty异常。
from multiprocessing import Queue q = Queue(5) #创建队列对象,队列大小为5,队列中只能存放5个元素
q.put(1) #往队列中添加元素
q.put(2)
q.put(3)
q.put(4)
q.put(5)
print(q.full()) #检测队列是否满了~
print(q.get()) #取出队列中的值
print(q.get())
print(q.get())
print(q.get())
print(q.get())
print(q.empty()) #检测队列为空
q.get_nowait() #返回q中的一个项,如果q为空此方法则阻塞,知道队列中有项目可以用为止。
# 用于控制阻塞行为,默认为True,如果设置为False,将引发Queue.Empty异常。
结果:
用while循环和异常处理实现即使队列中没有元素,也不阻塞,而是等待队列中有了元素之后,再获取元素。
from multiprocessing import Queue
import time q = Queue(5) #创建队列对象,队列大小为5,队列中只能存放5个元素
q.put(1) #往队列中添加元素
q.put(2)
q.put(3)
q.put(4)
q.put(5)
print(q.full()) #检测队列是否满了~
print(q.get()) #取出队列中的值
print(q.get())
print(q.get())
print(q.get())
print(q.get())
print(q.empty()) #检测队列为空
while True:
try:
q.get_nowait() #返回q中的一个项,如果q为空此方法则阻塞,知道队列中有项目可以用为止。
# 用于控制阻塞行为,默认为True,如果设置为False,将引发Queue.Empty异常。
except:
print('队列已空!') #用异常处理解决异常
time.sleep(1) #等1秒之后,再获取队列中的元素
结果:
通过队列在两个子进程之间通信。
from multiprocessing import Queue,Process class MyClass(Process):
def __init__(self,q):
super().__init__()
self.q = q def run(self):
self.q.put('hello') #将数据添加到队列中 class Consume(Process):
def __init__(self,q):
super().__init__()
self.q = q
def run(self):
print(self.q.get()) #将数据从队列中取出 if __name__ == '__main__':
q = Queue()
p = MyClass(q) #生产数据子进程
p.start()
c = Consume(q) #消耗数据子进程
c.start()
结果:
python_并发编程——队列的更多相关文章
- Python并发编程-队列
队列 IPC = Inter-Process Communication 队列 先进先出 队列的几种方法 #put() #full() #get() #empty() #get-nowait() fr ...
- python_并发编程——管道
1.管道 from multiprocessing import Pipe conn1,conn2 = Pipe() #返回两个值 conn1.send('wdc') #发送 print(conn2. ...
- python_并发编程——消费者和生产者模型
消费者和生产者模型 from multiprocessing import Process,Queue import time import random class Producer(Process ...
- python_并发编程——进程池
1.进程池 from multiprocessing import Pool def func(n): for i in range(10): print(n+1) if __name__ == '_ ...
- python_并发编程——数据共享
1.数据共享 实现进程之间的数据共享 from multiprocessing import Manager,Process class MyPro(Process): def __init__(se ...
- python_并发编程——事件
1.事件 :通过一个信号来控制多个进程同时执行或者阻塞. 一个信号可以使所有的进程都进入阻塞状态,也可以控制所有的进程接触阻塞,一个事件被创建之后,默认是阻塞状态. from multiprocess ...
- python_并发编程——锁
多进程模拟买票~ import time import json from multiprocessing import Process class Show(Process): #查 def run ...
- python_并发编程——守护进程
1.守护进程 守护进程会随着主进程的代码执行结束而结束. 语法:进程对象.daemon = True时,表示将进程设置为守护进程,一定在start之前设置. import time from mult ...
- python_并发编程——多进程的第二种启动方式
1.多进程的第二种启动方式 import os from multiprocessing import Process # 创建一个自定义类,继承Process类 class MyProcess(Pr ...
随机推荐
- csu 1987: 绚丽的手链
1987: 绚丽的手链 Submit Page Summary Time Limit: 6 Sec Memory Limit: 512 Mb Submitted: 13 ...
- Python MySQLdb 学习总结(转)
转自http://www.cnblogs.com/coser/archive/2012/01/12/2320741.html 感谢@糖拌咸鱼 任何应用都离不开数据,所以在学习python的时候,当然也 ...
- was8.5调用HttpPost使用httpClient-4.5.1.jar与was原生自带jar包冲突
一.更换jar方法. 1.将httpClient4.5.1.jar包去掉,更换使用commons-httpclient-3.1.jar. 2.更换方法,将HttpPost类转换为PostMethod类 ...
- [转帖]Helm V2 迁移到 V3 版本
Helm V2 迁移到 V3 版本 -- :: Mr-Liuqx 阅读数 63更多 分类专栏: kubernetes 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上 ...
- Python操作MongoDB查询时处理ObjectId
从bson中导入ObjectId对象,将字符串转换成id对象查询使用: from bson import ObjectId import pymongo conn = pymongo.MongoCli ...
- IP核——FIFO
一.Quartus 1.打开Quartus ii,点击Tools---MegaWizard Plug-In Manager 2.弹出创建页面,选择Creat a new custom megafunc ...
- 使用PHP开发HR系统(5)
本节讲述如何拆分页面以及使用jquery和ajax实现局部刷新. =================================================================== ...
- redis客户端介绍及php客户端的下载安装
一.PHP客户端1.官方提供了几款PHP客户端,包括amphp/redis.phpredis.Predis.Rediska.推荐使用官方推荐的两款客户端,phpredis.Predis2.phpred ...
- ② Python3.0 运算符
Python3.0 语言支持的运算符有: 算术运算符.比较(关系)运算符.赋值运算符.逻辑运算符.位运算符.成员运算符.身份运算符.运算符优先级 一.算术运算符 常见的算术运算符有+,-,*,/,%, ...
- ① Python3.0基础语法
稍微了解一下py2.0和py3.0的区别,Py3.0在设计的时候,为了不带入过多的累赘,没有考虑向下兼容低版本的Py2.0.而在低版本中Py2.6作为过渡版,基本使用Py2.x的语法和库,同时考虑Py ...