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 ...
随机推荐
- Python Tkinter 窗口创建与布局
做界面,首先需要创建一个窗口,Python Tkinter创建窗口很简单:(注意,Tkinter的包名因Python的版本不同存在差异,有两种:Tkinter和tkinter,读者若发现程序不能运行, ...
- sql查询出现1055 this is incompatible with sql_mode=only_full_group_by
今天在测试服务器上突然出现了这么一个MySQL的问题,同样的代码正式服没有问题,那肯定就是出在了配置上,查了一下原因才明白原来是数据库版本为5.7以上的版本, 默认是开启了 only_full_gro ...
- python技巧 — 整合 User-Agent 大全汇总
一.IE 浏览器 而IE各个版本典型的userAgent如下:Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)Mozilla/4.0 (compat ...
- flask框架(四)——flask CBV视图类解析
CBV视图类的两种基本写法 #第一种写法class IndexView(views.View): methods = ['GET'] decorators = [auth, ] def dispatc ...
- C++ 多态详解及常见面试题
今天,讲一讲多态: 多态就是不同对象对同一行为会有不同的状态.(举例 : 学生和成人都去买票时,学生会打折,成人不会) 实现多态有两个条件: 一是虚函数重写,重写就是用来设置不同状态的 二是对象调 ...
- 接口与DRF的安装
接口 # 接口:url链接,通过向链接发送不同的类型请求与参数得到相应的响应数据# 1.在视图层书写处理请求的 视图函数# 2.在路由层为视图函数配置 url链接 => 产生接口# 3.前台通 ...
- 使用QMetaObject获取类的属性
const QMetaObject *metaobject = object->metaObject(); int count = metaobject->propertyCount(); ...
- JavaScript中数组的key-value在对象中倒装的妙用
对于数组的去重.寻找指定元素的索引,通常我们都是通过遍历来解决,但是在某些应用场景下,将数组的value-key进行倒装,也即将value当做对象的key,key当做对象value,可以极大降低算法的 ...
- power shell命令添加SharePoint用户组与用户(用户为域用户)
查看SharePoint用户组 Get-PnPGroup 查看某一用户组 Get-PnPGroup -Identity "用户组名" 查看某一用户组下的所有成员 Get-PnPGr ...
- vue+vant-UI框架写的购物车的复选框全选和反选
购物车页面的设计图 商品的列表 代码: <ul v-if="shoppingListData.rows.length"> <li v-for="(ite ...