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_并发编程——队列的更多相关文章

  1. Python并发编程-队列

    队列 IPC = Inter-Process Communication 队列 先进先出 队列的几种方法 #put() #full() #get() #empty() #get-nowait() fr ...

  2. python_并发编程——管道

    1.管道 from multiprocessing import Pipe conn1,conn2 = Pipe() #返回两个值 conn1.send('wdc') #发送 print(conn2. ...

  3. python_并发编程——消费者和生产者模型

    消费者和生产者模型 from multiprocessing import Process,Queue import time import random class Producer(Process ...

  4. python_并发编程——进程池

    1.进程池 from multiprocessing import Pool def func(n): for i in range(10): print(n+1) if __name__ == '_ ...

  5. python_并发编程——数据共享

    1.数据共享 实现进程之间的数据共享 from multiprocessing import Manager,Process class MyPro(Process): def __init__(se ...

  6. python_并发编程——事件

    1.事件 :通过一个信号来控制多个进程同时执行或者阻塞. 一个信号可以使所有的进程都进入阻塞状态,也可以控制所有的进程接触阻塞,一个事件被创建之后,默认是阻塞状态. from multiprocess ...

  7. python_并发编程——锁

    多进程模拟买票~ import time import json from multiprocessing import Process class Show(Process): #查 def run ...

  8. python_并发编程——守护进程

    1.守护进程 守护进程会随着主进程的代码执行结束而结束. 语法:进程对象.daemon = True时,表示将进程设置为守护进程,一定在start之前设置. import time from mult ...

  9. python_并发编程——多进程的第二种启动方式

    1.多进程的第二种启动方式 import os from multiprocessing import Process # 创建一个自定义类,继承Process类 class MyProcess(Pr ...

随机推荐

  1. Python Tkinter 窗口创建与布局

    做界面,首先需要创建一个窗口,Python Tkinter创建窗口很简单:(注意,Tkinter的包名因Python的版本不同存在差异,有两种:Tkinter和tkinter,读者若发现程序不能运行, ...

  2. sql查询出现1055 this is incompatible with sql_mode=only_full_group_by

    今天在测试服务器上突然出现了这么一个MySQL的问题,同样的代码正式服没有问题,那肯定就是出在了配置上,查了一下原因才明白原来是数据库版本为5.7以上的版本, 默认是开启了 only_full_gro ...

  3. python技巧 — 整合 User-Agent 大全汇总

    一.IE 浏览器 而IE各个版本典型的userAgent如下:Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)Mozilla/4.0 (compat ...

  4. flask框架(四)——flask CBV视图类解析

    CBV视图类的两种基本写法 #第一种写法class IndexView(views.View): methods = ['GET'] decorators = [auth, ] def dispatc ...

  5. C++ 多态详解及常见面试题

    今天,讲一讲多态: 多态就是不同对象对同一行为会有不同的状态.(举例 : 学生和成人都去买票时,学生会打折,成人不会) 实现多态有两个条件: 一是虚函数重写,重写就是用来设置不同状态的   二是对象调 ...

  6. 接口与DRF的安装

    接口 # 接口:url链接,通过向链接发送不同的类型请求与参数得到相应的响应数据​# 1.在视图层书写处理请求的 视图函数# 2.在路由层为视图函数配置 url链接 => 产生接口# 3.前台通 ...

  7. 使用QMetaObject获取类的属性

    const QMetaObject *metaobject = object->metaObject(); int count = metaobject->propertyCount(); ...

  8. JavaScript中数组的key-value在对象中倒装的妙用

    对于数组的去重.寻找指定元素的索引,通常我们都是通过遍历来解决,但是在某些应用场景下,将数组的value-key进行倒装,也即将value当做对象的key,key当做对象value,可以极大降低算法的 ...

  9. power shell命令添加SharePoint用户组与用户(用户为域用户)

    查看SharePoint用户组 Get-PnPGroup 查看某一用户组 Get-PnPGroup -Identity "用户组名" 查看某一用户组下的所有成员 Get-PnPGr ...

  10. vue+vant-UI框架写的购物车的复选框全选和反选

    购物车页面的设计图 商品的列表 代码: <ul v-if="shoppingListData.rows.length"> <li v-for="(ite ...