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 ...
随机推荐
- IO多路复用(select、poll、epoll)介绍及select、epoll的实现
IO多路复用(select.poll.epoll)介绍及select.epoll的实现 IO多路复用中包括 select.pool.epoll,这些都属于同步,还不属于异步 一.IO多路复用介绍 1. ...
- 测试报告ExtentReport改进
具体步骤Step-1:在pom.xml文件中添加 Maven 依赖包 <?xml version="1.0" encoding="UTF-8"?> ...
- 《十天学会 PHP》的重难点
记录一下我在学习<十天学会 PHP>(第六版)的过程中的遇到的重难点,该课程是学习制作一个简单的留言板. 准备工作 XAMPP(Apache + MySQL + PHP + PERL) 是 ...
- Qt deletelater函数分析(2)
夫唯不争,故天下莫能与之争 -- 老子 在C++中,delete 和 new 必须 配对使用,Qt作为C++的库,显然是不会违背C++原则.但是,qt有自己的内存管理,有时候虽然使用了new, ...
- javaNIO核心概念
在java的阻塞IO中使用InputStream和outputStream来进行输入和输出,那么两种流是相互独立使用的,而且每次数据传输都要通过“用户态数据”向“os内核态数据”copy或从“os内核 ...
- TCP协议有几大计时器?
1)超时重传计时器 目的:避免无限等待确认报文 创建时间:在发送TCP报文段时,会为该报文段设置一个超时重传计时器 可能发生的情况:在超时时间到达之前,收到了该报文段的确认则撤销计时器,否则重传该报文 ...
- xorm -sum 系列方法实例
求和数据可以使用Sum, SumInt, Sums 和 SumsInt 四个方法,Sums系列方法的参数为struct的指针并且成为查询条件. package main import ( " ...
- FindWindow SendMessage
FindWindow 用来根据类名和窗口名来得到窗口句柄的.但是这个函数不能查找子窗口,也不区分大小写. 如果要从一个窗口的子窗口中查找需要使用FindWindowEX. 1.在C#中使用方法如下: ...
- Nginx四个作用
本文只针对Nginx在不加载第三方模块的情况能处理哪些事情,由于第三方模块太多所以也介绍不完. Nginx能做什么 ——反向代理 ——负载均衡 ——HTTP服务器(动静分离) ——正向代理 以上就是我 ...
- 【转载】 C#使用Math.Round方法对计算结果进行四舍五入操作
在C#的数值运算中,有时候需要对计算结果进行四舍五入操作,此时就可使用内置方法Math.Round方法来实现四舍五入操作,Math.Round方法有多个重载函数,支持设置有效位数进行四舍五入,如果没有 ...