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 ...
随机推荐
- svn服务安装教程
https://www.cnblogs.com/yankyblogs/p/7282752.html
- InfoGan笔记
InfoGAN: Interpretable Representation Learning by Information Maximizing Generative Adversarial Nets ...
- docker(一): 安装
开始 docker是一个可以帮助开发者使用容器(containers)开发.部署和运行应用程序的平台.llinux下使用容器部署系统称为containerization. container 是映像( ...
- Ted演讲 The secrets of learning a new language
第一次写这么多英文~~对照双语字幕整理的~~ 这是我很喜欢的一个演讲~~ 让我们一起学英文吧 l I love learning foreign languages. l In fact, I l ...
- 配置Setting.xml文件提高maven更新下载jar包速度
<?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://mav ...
- git便携版 添加git-bash到右键菜单
注册表路径 HKEY_CLASSES_ROOT\Directory\Background\shell 新建项取名open in git 默认设置为右键显示的名称 Git Bash Here 新建字符串 ...
- SQL Server修改表的模式schema
use myDBgo create schema myschema --先建立go alter schema myschema transfer dbo.myTable --移动对象至建立的schem ...
- python day 8: re模块补充,导入模块,hashlib模块,字符串格式化,模块知识拾遗,requests模块初识
目录 python day 8 1. re模块补充 2. import模块导入 3. os模块 4. hashlib模块 5. 字符串格式:百分号法与format方法 6. 模块知识拾遗 7. req ...
- Web 标准构成
Web标准不是某一个标准,而是由W3C和其他标准化组织制定的一系列标准的集合.主要包括结构(Structure).表现(Presentation)和行为(Behavior)三个方面. 结构标准:结构用 ...
- HTML—链接
怎么看都觉得链接太神奇了,尤其是创建电子邮件的链接,于是决定单独写一篇关于HTML链接的内容,同时加深记忆 一.首先,超链接可以是一个字,一个词,或者一组词,也可以是一幅图像,通过点击这些内容来跳转到 ...