Python并发编程-queue
Python并发编程-queue
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.Queue
# !/usr/bin/env python
# _*_conding:utf-8_*_
# @author :yinzhengjie
# blog:http://www.cnblogs.com/yinzhengjie from queue import Queue """
Queue是先进先出(First-in-First-out)队列,常用方法如下:
queue.Queue(maxsize=0):
创建FIFO队列,返回Queue对象
maxsize表示队列大小,小于等于0则队列长度没有限制 Queue.get(block=True,timeout=None):
从队列中移除元素并返回这个元素
block为阻塞,timeout为超时
如果block为True,是阻塞,timeout为None就是一直阻塞
如果block为True单timeout有值,就阻塞到一定描述抛出Empty异常
block为False,是非阻塞,timeout将被忽略,要么成功返回一个元素,要么抛出empty异常 Queue.get_nowait():
等价于get(False),也就是说要么成功返回一个元素,要么抛出empty异常
但是queue的这种阻塞效果,需要多线程来演示 Queue.put(item,block=True,time=None):
把一个元素加入到队列中去
block=True,timeout=None,表示如果当前队列已经满了,则一直阻塞直至有空位存放元素。
block=True,timeout=5,表示如果当前队列已经满了,则阻塞五秒依旧没有空位存放元素就抛出Full异常
block=Flase,timeout失效,立即返回,能塞进去就塞进去,不能就抛出Full异常。 Queue.put_nowait(item):
等价于Queue.put(item,False),也就是能塞进去就塞,不能就抛出Full异常
""" q = Queue(3) # 设置队列大小为3
q.put("hdfs")
q.put("mapreduce")
print(q.qsize(), q.full())
q.put("yarn")
print(q.qsize(), q.full())
# q.put("hbase") #这里会阻塞,因为上面已经网队列中放慢3个了,再放是没法放进队列啦,直到有人消费数据才能有多余的空间存入 print(q.get())
print(q.qsize(), q.empty())
print(q.get())
print(q.qsize(), q.empty())
print(q.get())
# print(q.get()) #这里也会阻塞,因为已经从队列中取出三个了,再去是取不出来啦,直到有人放入数据才能取到数据
# print(q.get(timeout=3)) #阻塞,但超时3秒还拿不到数据就会抛出Empty异常。
2 False
3 True
hdfs
2 False
mapreduce
1 False
yarn
以上代码执行结果戳这里
二.LifoQueue
#!/usr/bin/env python
#_*_conding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie from queue import LifoQueue
"""
LifoQueue是后进先出队列,这个类继承自Queue,使用方式同Queue。
""" q = LifoQueue(3) #设置队列大小为3
q.put("hdfs")
q.put("mapreduce")
print(q.qsize(),q.full())
q.put("yarn")
print(q.qsize(),q.full())
# q.put("hive") #这里会阻塞,因为上面已经网队列中放慢3个了,再放是没法放进队列啦,直到有人消费数据才能有多余的空间存入 print(q.get())
print(q.qsize(),q.empty())
print(q.get())
print(q.qsize(),q.empty())
print(q.get())
# print(q.get()) #这里也会阻塞,因为已经从队列中取出三个了,再去是取不出来啦,直到有人放入数据才能取到数据
# print(q.get(timeout=3)) #阻塞,但超时3秒还拿不到数据就会抛出Empty异常。
2 False
3 True
yarn
2 False
mapreduce
1 False
hdfs
以上代码执行结果戳这里
三.PriorityQueue
# !/usr/bin/env python
# _*_conding:utf-8_*_
# @author :yinzhengjie
# blog:http://www.cnblogs.com/yinzhengjie from queue import PriorityQueue
import random
from string import ascii_lowercase """
PriorityQueue是优先队列,这个类继承自Queue类,并重写了入队,出队的方法。
它里面是堆,用列表实现的堆,构建的是小顶堆。
元素可以存储任意值,但是优先队列内部是直接进行元素大小比较的,不同类型比较可能抛出异常
入队时,将元素加入到列表末尾,然后进行小顶堆调整
出队时,将索引0即堆顶处最小值弹出,然后将最后一个元素放到堆顶,重新堆调整。
""" q = PriorityQueue() gender = ["boy","girl"] #我们模拟一下男生和女士,不管传入的字符串随机字符串是如何,最终取出来的数据应该是男士优先的 for i in range(10):
q.put("{} : {}".format(random.choice(gender),random.choice(ascii_lowercase))) while not q.empty():
print(q.get_nowait())
boy : m
boy : m
boy : s
boy : w
girl : a
girl : a
girl : d
girl : h
girl : m
girl : y
以上代码执行结果戳这里
Python并发编程-queue的更多相关文章
- Python并发编程06 /阻塞、异步调用/同步调用、异步回调函数、线程queue、事件event、协程
Python并发编程06 /阻塞.异步调用/同步调用.异步回调函数.线程queue.事件event.协程 目录 Python并发编程06 /阻塞.异步调用/同步调用.异步回调函数.线程queue.事件 ...
- Python并发编程__多进程
Python并发编程_多进程 multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大 ...
- Python并发编程二(多线程、协程、IO模型)
1.python并发编程之多线程(理论) 1.1线程概念 在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程 线程顾名思义,就是一条流水线工作的过程(流水线的工作需要电源,电源就相当于 ...
- Python并发编程一(多进程)
1.背景知识(进程.多道技术) 顾名思义,进程即正在执行的一个过程.进程是对正在运行程序的一个抽象. 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一 ...
- 《转载》Python并发编程之线程池/进程池--concurrent.futures模块
本文转载自Python并发编程之线程池/进程池--concurrent.futures模块 一.关于concurrent.futures模块 Python标准库为我们提供了threading和mult ...
- Python并发编程系列之多线程
1 引言 上一篇博文详细总结了Python进程的用法,这一篇博文来所以说Python中线程的用法.实际上,程序的运行都是以线程为基本单位的,每一个进程中都至少有一个线程(主线程),线程又可以创建子线程 ...
- Python并发编程系列之多进程(multiprocessing)
1 引言 本篇博文主要对Python中并发编程中的多进程相关内容展开详细介绍,Python进程主要在multiprocessing模块中,本博文以multiprocessing种Process类为中心 ...
- python并发编程之进程、线程、协程的调度原理(六)
进程.线程和协程的调度和运行原理总结. 系列文章 python并发编程之threading线程(一) python并发编程之multiprocessing进程(二) python并发编程之asynci ...
- python并发编程&多线程(二)
前导理论知识见:python并发编程&多线程(一) 一 threading模块介绍 multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性 官网链 ...
随机推荐
- 123456123456----updateV#%#6%#%---pinLv###1%%%----com.zzj.CarCleanGame567---前show后广--儿童洗车-222222
com.zzj.CarCleanGame567---前拼show后广--儿童洗车-
- phpspreadsheet 中文文档(六)读写文件+读取文件
2019年10月11日14:05:58 读写文件 从体系结构您已经知道,使用基本PhpSpreadsheet类无法对持久性存储进行读写.为此,PhpSpreadsheet提供读者和作家,这是实现\Ph ...
- 量化编程技术—itertools寻找最优参数
# -*- coding: utf-8 -*- # @Date: 2017-08-26 # @Original: ''' 在量化数据处理中,经常使用itertools来完成数据的各种排列组合以寻找最优 ...
- es查询和更新 语句示例
文档目录: https://www.elastic.co/guide/index.html GET _search { "query": { "match_all&quo ...
- aix如何将history输出所有命令导出到文本文件
more .sh_history cat .sh_history > mylogfile.txt
- shoshana-技术文集
20190422 全球最厉害的 14 位程序员,请收下我的膝 20190423 观察者模式(Observer)和发布(Publish/订阅模式(Subscribe) 2019042 ...
- 【转】python测试框架--doctest
转自https://my.oschina.net/lionets/blog/268542 doctest 是一个 Python 发行版自带的标准模块.有两种模式可供使用. ##1 doctest 的概 ...
- Stack实现
栈的三种操作算法很简单 STACK-EMPTY(S) 1 if S.top == 0 2 return TRUE 3 else return FALSE PUSH(S, x) 1 S.top = ...
- HDU校赛 | 2019 Multi-University Training Contest 1
2019 Multi-University Training Contest 1 http://acm.hdu.edu.cn/contests/contest_show.php?cid=848 100 ...
- MongoDB的安装,mongod和mongo的区别
一. mongoDB安装路径 安装路径(最新4.0.11):https://www.mongodb.com/download-center/community?jmp=nav 建议另外找路径下载,外网 ...