广告
返回顶部
首页 > 资讯 > 后端开发 > Python >42. Python Queue 模
  • 674
分享到

42. Python Queue 模

PythonQueue 2023-01-31 05:01:33 674人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

python提供了Queue模块来专门实现消息队列Queue对象Queue对象实现一个fifo队列(其他的还有lifo、priority队列,这里不再介绍)。queue只有maxsize一个构造参数,用来指定队列容量,指定为0的时候代表容量

python提供了Queue模块来专门实现消息队列Queue对象

Queue对象实现一个fifo队列(其他的还有lifo、priority队列,这里不再介绍)。

queue只有maxsize一个构造参数,用来指定队列容量,指定为0的时候代表容量无限。


主要有以下成员函数:

Queue.qsize():返回消息队列的当前空间。返回的值不一定可靠。

Queue.empty():判断消息队列是否为空,返回True或False。同样不可靠。

Queue.not_empty():判断消息队列是否为非空。同上不可靠。

Queue.full():类似上边,判断消息队列是否满。

Queue.put(item, block=True, timeout=None):往消息队列中存放消息。block可以控制是否阻塞,timeout指定阻塞时候的等待时间。如果不阻塞或者超时,会引起一个full exception。

Queue.put_nowait(item):相当于put(item, False).

Queue.get(block=True, timeout=None):获取一个消息,其他同put。

Queue.task_done():接收消息的线程通过调用这个函数来说明消息对应的任务已完成。

Queue.join():表示等待,等到队列为空,在执行别的操作。

Queue.terminate():表示强制关闭。


例子:

#!/usr/bin/env Python
# -*- coding:utf-8 -*-

from multiprocessing import Queue
from threading import Thread
import time


"""
写一个消费者和生产者,
用多线程方式实现,
通过类的重写的方法实现。
"""

class Proceducer(Thread):
    def __init__(self, queue):
        super(Proceducer,self).__init__()
        self.queue = queue

    def run(self):
        try:
            for i in xrange(1, 10):
                print ("put data is {0} to queue".fORMat(i))
                self.queue.put(i)
        except Exception as e:
            print ("put data error")
            raise e

class Consumer_even(Thread):
    def __init__(self, queue):
        super(Consumer_even , self).__init__()
        self.queue = queue

    def run(self):
        try:
            while not self.queue.empty():
                number = self.queue.get(block=True, timeout=3)
                if number % 2 != 0:
                    print("get {0} from queue EVEN, thread name is {1}".format(number, self.getName()))
                else:
                    self.queue.put(number)
                time.sleep(1)
        except Exception as e:
            raise e


class Consumer_odd(Thread):
    def __init__(self, queue):
        super(Consumer_odd , self).__init__()
        self.queue = queue

    def run(self):
        try:
            while not self.queue.empty():
                number = self.queue.get(block=True, timeout=3)
                if number % 2 == 0:
                    print("get {0} from queue ODD".format(number))
                else:
                    self.queue.put(number)
                time.sleep(1)
        except Exception as e:
            raise e





def main():
    queue = Queue()
    p = Proceducer(queue=queue)
    p.start()
    p.join()
    time.sleep(1)
    c1 = Consumer_even(queue=queue)
    c2 = Consumer_odd(queue=queue)

    c1.start()
    c2.start()
    c1.join()
    c2.join()
    print ("All thread terminate!")


if __name__ == '__main__':
    main()


结果:

put data is 1 to queue
put data is 2 to queue
put data is 3 to queue
put data is 4 to queue
put data is 5 to queue
put data is 6 to queue
put data is 7 to queue
put data is 8 to queue
put data is 9 to queue
get 1 from queue EVEN, thread name is Thread-2
get 2 from queue ODD
get 3 from queue EVEN, thread name is Thread-2
get 4 from queue ODD
get 5 from queue EVEN, thread name is Thread-2
get 6 from queue ODD
get 7 from queue EVEN, thread name is Thread-2
get 8 from queue ODD
get 9 from queue EVEN, thread name is Thread-2
All thread terminate!


--结束END--

本文标题: 42. Python Queue 模

本文链接: https://www.lsjlt.com/news/189082.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 42. Python Queue 模
    Python提供了Queue模块来专门实现消息队列Queue对象Queue对象实现一个fifo队列(其他的还有lifo、priority队列,这里不再介绍)。queue只有maxsize一个构造参数,用来指定队列容量,指定为0的时候代表容量...
    99+
    2023-01-31
    Python Queue
  • Python -- Queue模块
    学习契机 最近的一个项目中在使用grpc时遇到一个问题,由于client端可多达200,每个端口每10s向grpc server发送一次请求,server端接受client的请求后根据request信息更新数据库,再将数据库和配置文件的某...
    99+
    2023-01-31
    模块 Python Queue
  • [python模块]队列queue
    一、队列queue队列queue 多应用在多线程场景,多线程访问共享变量。对于多线程而言,访问共享变量时,队列queue的线程安全的。因为queue使用了一个线程锁(pthread.Lock()),以及三个条件变量(pthread.cond...
    99+
    2023-01-31
    队列 模块 python
  • python模块学习(queue模块的Q
    学习版本3.5.2 PriorityQueue类和LifoQueue类继承Queue类然后重写了_init、_qsize、_put、_get这四个类的私有方法 Queue:先进先出队列的同步实现,通过双向列表实现的 # Initi...
    99+
    2023-01-31
    模块 python queue
  • Python queue模块功能大全
    目录queue模块简介1. Queue(FIFO队列)2. LifoQueue(LIFO队列)3. PriorityQueue(优先级队列)queue模块简介 queue模块是Pyt...
    99+
    2023-05-16
    Python queue模块 Python queue
  • python queue
    queue是一个先进先出的队列 class Queue.Queue(maxsize) maxsize是一个×××,表示队列的大小,,不填,默认无限大 Queue.qsize() 返回队列的大小 Queue.em...
    99+
    2023-01-31
    python queue
  • Redis Python Queue
    RedisQueue.py文件内容:import redisclass RedisQueue(object): """Simple Queue with Redis Backend""" def __init__(self, name,...
    99+
    2023-01-31
    Redis Python Queue
  • Python多线程 Queue 模块常见用法
    queue介绍 queue是python中的标准库,俗称队列,可以直接import 引用,在python2.x中,模块名为Queue 在python中,多个线程之间的数据是共享的,多个线程进行数据交换的时候,不能够...
    99+
    2022-06-02
    Python Queue 模块 Python多线程
  • Python Queue模块详细介绍及实例
    Python Queue模块 Python中,队列是线程间最常用的交换数据的形式。Queue模块是提供队列操作的模块,虽然简单易用,但是不小心的话,还是会出现一些意外。 创建一个“队列”对象 imp...
    99+
    2022-06-04
    详细介绍 实例 模块
  • Python多线程中Queue模块怎么用
    这篇文章将为大家详细讲解有关Python多线程中Queue模块怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。queue介绍queue是python中的标准库,俗称队列,可以直接import 引用,在...
    99+
    2023-06-20
  • python 多线程+queue
    python的queue设计的是线程安全的,所以大家伙放心用吧! python多线程的一种简单的实现如下: #!/usr/bin/env python # -*- coding: utf-8 -*- import threadi...
    99+
    2023-01-31
    多线程 python queue
  • 41. Python Queue 多进
    消息队列:消息队列是在消息传输过程中保存消息的容器。消息队列最经典的用法就是消费者和生产者之间通过消息管道来传递消息,消费者和生产生是不通的进程。生产者往管道中写消息,消费者从管道中读消息。相当于水管,有一个入口和出口,水从入口流入出口流出...
    99+
    2023-01-31
    Python 多进 Queue
  • Python 队列Queue和Prior
    Python的Queue模块适用于多线程编程的FIFO实现。它可用于在生产者(producer)和消费者(consumer)之间线程安全(thread-safe)地传递消息或其它数据,因此多个线程可以共用同一个Queue实例。 F...
    99+
    2023-01-31
    队列 Python Prior
  • python消息队列Queue
    实例1:消息队列Queue,不要将文件命名为“queue.py”,否则会报异常“ImportError: cannot import name 'Queue'”#coding=utf-8 from multiprocessing impor...
    99+
    2023-01-31
    队列 消息 python
  • 高性能Python之:Queue,deq
    Python作为一门脚本语言,有着很多便捷易用的优秀特点,但他也有一个很大的缺陷,就是性能太差,这也是作为脚本语言不可避免的问题,这里我们来学习一些方法,提高Python的性能: 为了大家测试方便,这里同时给了代码的图片版和文字版。...
    99+
    2023-01-31
    高性能 Python deq
  • python中Queue怎么通信
    这篇文章主要介绍了python中Queue怎么通信,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。python的五大特点是什么python的五大特点:1.简单易学,开发程序时,...
    99+
    2023-06-14
  • C++ stack与queue模拟实现详解
    目录stack与queue模拟实现 stackqueue为什么选择deque作为stack和queue的底层默认容器总结stack与queue模拟实现 在stl中,stack(...
    99+
    2022-11-12
  • 生产者、消费者模型---Queue类
    Queue队列在几乎每种编程语言都会有,python的列表隐藏的一个特点就是一个后进先出(LIFO)队列。而本文所讨论的Queue是python标准库queue中的一个类。它的原理与列表相似,但是先进先出(FIFO)队列。而内部实现更为完...
    99+
    2023-01-30
    生产者 模型 消费者
  • Python 队列Queue和PriorityQueue解析
    目录Python 队列Queue和PriorityQueuePython的Queue模块优先级队列PriorityQueue的特点python 实现一个优先级队列pytho...
    99+
    2022-11-11
  • python中的Queue怎么通信
    这篇文章主要介绍了python中的Queue怎么通信的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python中的Queue怎么通信文章都会有所收获,下面我们一起来看看吧。说明Queue可以使用multipro...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作