python队列基本操作和多线程队列

目录
  • 一、队列基本操作
  • 二、多线程队列

一、队列基本操作

from queue import Queue

q = Queue(5)  # 创建一个容量为5的队列。如果给一个小于0的数,则队列为无限大小。(这是官方的解释,实际不是无限大小,而是跟内存有关)

# 存储数据
q.put(123)  # 数值 
q.put('hello world!')  # 字符串
q.put(['hello', 'world'])  # 列表
q.put(('hello', 'world'))  # 元组
q.put({'hello': 'world'})  # 字典

# 如果再试图存储第六个,则会发生阻塞,因为容量已设定为5
# q.put({'hello': 'python'})

取出队列中的值:

print(q.get())
print(q.get())
print(q.get())
print(q.get())
print(q.get())

如图五个值被依次取出。Queue队列遵循的是先进先出。

q.put_nowait()

q.put_nowait()方法可以无阻碍地向队列中添加内容,如果队列已满则会立即报错,不会等待(即不会发生阻塞)。

q.get_nowait()

q.get_nowait()方法可以无阻碍地从队列中取出内容,如果队列是空的则也会直接报错,不会等待。
具体使用不再示例。

查看队列当前大小

q.qsize()

print(q.qsize())
print(q.get())
print(q.qsize())
print(q.get())
print(q.qsize())
print(q.get())
print(q.qsize())
print(q.get())
print(q.qsize())
print(q.get())
print(q.qsize())

如图,每取出一个值,队列大小就减一。同样每存入一个值队列大小就会加一。

q.full()

判断队列是否是满的。

q.empty()

判断队列是否是空的。

print(q.full())
print(q.get())
print(q.get())
print(q.full())
print(q.empty())
print(q.get())
print(q.get())
print(q.get())
print(q.empty())

二、多线程队列

from queue import Queue
import threading
import time

# 存储值,每隔一秒存储一个
def set_value(q):
    num = 0
    while True:
        q.put(num)
        num += 1
        time.sleep(1)

# 取值,不间断地取
def get_value(q):
    while True:
        print(q.get())

if __name__ == '__main__':
    q = Queue(4)
    t1 = threading.Thread(target=set_value, args=(q, ))
    t2 = threading.Thread(target=get_value, args=(q, ))

    t1.start()
    t2.start()

程序开始运行,一边存储,一边取值:

此思想应用在爬虫上,即一边访问并获取数据,一边下载数据。

到此这篇关于python队列基本操作和多线程队列的文章就介绍到这了,更多相关python队列内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python3中多线程编程的队列运作示例

    Python3,开一个线程,间隔1秒把一个递增的数字写入队列,再开一个线程,从队列中取出数字并打印到终端 #! /usr/bin/env python3 import time import threading import queue # 一个线程,间隔一定的时间,把一个递增的数字写入队列 # 生产者 class Producer(threading.Thread): def __init__(self, work_queue): super().__init__() # 必须调用 self.

  • Python实现简单多线程任务队列

    最近我在用梯度下降算法绘制神经网络的数据时,遇到了一些算法性能的问题.梯度下降算法的代码如下(伪代码): def gradient_descent(): # the gradient descent code plotly.write(X, Y) 一般来说,当网络请求 plot.ly 绘图时会阻塞等待返回,于是也会影响到其他的梯度下降函数的执行速度. 一种解决办法是每调用一次 plotly.write 函数就开启一个新的线程,但是这种方法感觉不是很好. 我不想用一个像 cerely(一种分布式任

  • Python多线程和队列操作实例

    Python3,开一个线程,间隔1秒把一个递增的数字写入队列,再开一个线程,从队列中取出数字并打印到终端 复制代码 代码如下: #! /usr/bin/env python3 import time import threading import queue # 一个线程,间隔一定的时间,把一个递增的数字写入队列 # 生产者 class Producer(threading.Thread): def __init__(self, work_queue):         super().__in

  • Python多线程通信queue队列用法实例分析

    本文实例讲述了Python多线程通信queue队列用法.分享给大家供大家参考,具体如下: queue: 什么是队列:是一种特殊的结构,类似于列表.不过就像排队一样,队列中的元素一旦取出,那么就会从队列中删除. 线程之间的通信可以使用队列queue来进行 线程如何使用queue.Queue[还有其他类型的对象下面讲]来通信: 1.创建一个Queue对象:对象=queue.Queue(x),x是队列容量,x可以不填,默认没有容量限制, 2.get()可以使线程从队列中获取一个元素,如果队列为空,ge

  • Python多线程结合队列下载百度音乐的方法

    本文实例讲述了Python多线程结合队列下载百度音乐的方法.分享给大家供大家参考.具体如下: 一直想做个下载音乐的脚本,后来决定就拿百度音乐开刀,经过多次分析,终于制作了一个下载百度音乐的脚本,目前只默认下载第一页,童鞋们可以自由拓展. 适用Windows和Linux平台.依赖BeautifulSoup这个库,主要对HTML进行解析 #!/usr/bin/python # -*- coding: utf-8 -*- ''' 百度中批量下载某歌手的歌(目前只下载第一页,可以自行拓展) @autho

  • python队列基本操作和多线程队列

    目录 一.队列基本操作 二.多线程队列 一.队列基本操作 from queue import Queue q = Queue(5)  # 创建一个容量为5的队列.如果给一个小于0的数,则队列为无限大小.(这是官方的解释,实际不是无限大小,而是跟内存有关) # 存储数据 q.put(123)  # 数值  q.put('hello world!')  # 字符串 q.put(['hello', 'world'])  # 列表 q.put(('hello', 'world'))  # 元组 q.pu

  • python利用多线程+队列技术爬取中介网互联网网站排行榜

    目录 目标站点分析 编码时间 目标站点分析 本次要抓取的目标站点为:中介网,这个网站提供了网站排行榜.互联网网站排行榜.中文网站排行榜等数据. 网站展示的样本数据量是 :58341. 采集页面地址为 https://www.zhongjie.com/top/rank_all_1.html, UI如下所示:  由于页面存在一个[尾页]超链接,所以直接通过该超链接获取累计页面即可. 其余页面遵循简单分页规则: https://www.zhongjie.com/top/rank_all_1.html

  • Python数据结构之栈、队列的实现代码分享

    1. 栈 栈(stack)又名堆栈,它是一种运算受限的线性表.其限制是仅允许在表的一端进行插入和删除运算.这一端被称为栈顶,相对地,把另一端称为栈底.向一个栈插入新元素又称作进栈.入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素:从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素. 栈(Stack)是限制插入和删除操作只能在一个位置进行的表,该位置是表的末端,称为栈的顶(top).栈的基本操作有PUSH(入栈)和POP(出栈).栈又被称为LIF

  • 详解Python中的四种队列

    队列是一种只允许在一端进行插入操作,而在另一端进行删除操作的线性表. 在Python文档中搜索队列(queue)会发现,Python标准库中包含了四种队列,分别是queue.Queue / asyncio.Queue / multiprocessing.Queue / collections.deque. collections.deque deque是双端队列(double-ended queue)的缩写,由于两端都能编辑,deque既可以用来实现栈(stack)也可以用来实现队列(queue

  • Python算法应用实战之队列详解

    队列(queue) 队列是先进先出(FIFO, First-In-First-Out)的线性表,在具体应用中通常用链表或者数组来实现,队列只允许在后端(称为rear)进行插入操作,在前端(称为front)进行删除操作,队列的操作方式和堆栈类似,唯一的区别在于队列只允许新数据在后端进行添加(摘录维基百科). 如图所示 队列的接口 一个队列至少需要如下接口: 接口 描述 add(x) 入队 delete() 出队 clear() 清空队列 isEmpty() 判断队列是否为空 isFull() 判断

  • 详解Python操作RabbitMQ服务器消息队列的远程结果返回

    先说一下笔者这里的测试环境:Ubuntu14.04 + Python 2.7.4 RabbitMQ服务器 sudo apt-get install rabbitmq-server Python使用RabbitMQ需要Pika库 sudo pip install pika 远程结果返回 消息发送端发送消息出去后没有结果返回.如果只是单纯发送消息,当然没有问题了,但是在实际中,常常会需要接收端将收到的消息进行处理之后,返回给发送端. 处理方法描述:发送端在发送信息前,产生一个接收消息的临时队列,该队

  • Python中线程的MQ消息队列实现以及消息队列的优点解析

    "消息队列"是在消息的传输过程中保存消息的容器.消息队列管理器在将消息从它的源中继到它的目标时充当中间人.队列的主要目的是提供路由并保证消息的传递:如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功地传递它.相信对任何架构或应用来说,消息队列都是一个至关重要的组件,下面是十个理由: Python的消息队列示例: 1.threading+Queue实现线程队列 #!/usr/bin/env python import Queue import threading import

  • Ruby中使用多线程队列(Queue)实现下载博客文章保存到本地文件

    Ruby:多线程下载博客文章到本地的完整代码 复制代码 代码如下: #encoding:utf-8 require 'net/http' require 'thread' require 'open-uri' require 'nokogiri' require 'date' $queue = Queue.new #文章列表页数 page_nums = 8 page_nums.times do |num|   $queue.push("http://www.cnblogs.com/hongfei

  • Python数据结构之栈、队列及二叉树定义与用法浅析

    本文实例讲述了Python数据结构之栈.队列及二叉树定义与用法.分享给大家供大家参考,具体如下: 目前只实现了三种,栈.队列和二叉树,哪天得空继续补吧~ 1. 栈 #栈 class Stack: def __init__(self,size = 16): self.stack = [] self.size = size self.top = -1 def setSize(self, size): self.size = size def isEmpty(self): if self.top ==

  • Python实现的栈、队列、文件目录遍历操作示例

    本文实例讲述了Python实现的栈.队列.文件目录遍历操作.分享给大家供大家参考,具体如下: 一. 栈与队列 1. 栈 stack 特点:先进先出[可以抽象成竹筒中的豆子,先进去的后出来] 后来者居上 mystack = [] #压栈[向栈中存数据] mystack.append(1) print(mystack) mystack.append(2) print(mystack) mystack.append(3) print(mystack) #出栈[从栈中取数据] mystack.pop()

随机推荐