Python Queue模块

本文详细介绍了Python中的Queue模块,包括不同类型的队列如FIFO和LIFO,以及如何使用Queue进行线程间的数据传递。通过具体示例展示了Queue的基本操作如put、get等,并提供了简单的多线程应用实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常用函数

Queue.Queue(masize):构造函数,创建了一个队列,先进先出
Queue.LifoQueue(maxsize) : 构造函数,相当于创建一个栈,后进先出
Queue.put():在队列的尾部插入一个项目,它有2个参数,一个是需要插入的项,第二个默认参数值为1,方法让线程暂停,直到空出一个数据单元项,如果参数为0,会出发Full Python的异常。
Queue.get(): 从队列头部删除而且返回一个项目,有一个可选参数,默认值是真,也就是True。get()就使调用线程暂停,直至有项目可用,如果队列为空且block为False,队列将引发Empty的Python异常。
Queue.qsize(): 返回队列的大小 
Queue.empty() :如果队列为空,返回True,反之False 
Queue.full() :如果队列满了,返回True,反之False,Queue.full 与 maxsize 大小对应 
Queue.get_nowait() 相当Queue.get(False)
Queue.put_nowait(item) 相当Queue.put(item, False)
Queue.task_done() 在完成一项工作之后,Queue.task_done()函数向任务已经完成的队列发送一个信号
Queue.join() 实际上意味着等到队列为空,再执行别的操作

来个简单例子

# -*- coding: UTF-8 -*-
import threading
import Queue
import time
class MyThread(threading.Thread):
    def __init__(self, threadID, name, type):
        super(MyThread, self).__init__()
        self.threadID, self.name,self.type = threadID, name, type

    def run(self):
        print "开始进程: " + self.name
        if self.type == 'w':
            self.run_write()
        else:
            self.run_read()
        print "退出进程:" + self.name

    def run_write(self):
        '''往队列中写'''
        global que
        for i in range(10):
            que.put(i)
            print '%s put num : %d ' % ( self.name, i)
            time.sleep(1)
    def run_read(self):
        '''从队列中取出来'''
        global que
        for i in range(10):
            print '%s get num : %d ' % ( self.name, que.get())
            time.sleep(1)
        printQue(que)
def printQue(q):
    '''打印队列'''
    while not q.empty():
      print q.get(),

def test(que):
    '''test'''
    thread1 = MyThread(1, 'thread-w', 'w')
    thread2 = MyThread(2, 'thread-r', 'r')
    thread1.start()
    thread2.start()
    print threading.enumerate()
    print "主进程退出"
if __name__ == '__main__':
    que = Queue.Queue()
    test(que)

转载于:https://my.oschina.net/731135090/blog/683553

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值