python Queue实现线程间通信

python中Queue是消息队列,提供线程间通信机制,python3中重名为为queue

Queue模块中的类:

Queue(maxsize=0):创建一个FIFO队列,若给定最大值,队列没有空间时阻塞,否则是无限队列

LifoQueue(maxsize=0):创建一个栈,maxsize含义同上

PriorityQueue(maxsize=0):创建一个优先队列,maxsize含义同上

Queue模块异常:

Empty:对空队列调用get*()方法时抛出异常

Full:对满队列调用put*()方法时抛出异常

Queue对象方法:

qsize():返回队列大小,是近似值(返回时可能队列大小被修改了)

empty():判断队列是否为空

full():判断队列是否为满

put(item, block=True, timeout=None):将item加入队列,可选阻塞和阻塞时间

put_nowait(item):即put(item, False)

get(block=True, timeout=None):从队列中获取元素,可选阻塞和阻塞时间

get_nowait():即get(False)

task_done():用于表示队列中某个元素已经执行完成,会被join()调用

join():队列中所有元素执行完毕并调用task_done()信号之前,保持阻塞

一个使用Queue通信的例子:

# -*- coding: UTF-8 -*-
#!/usr/bin/env python

import thread
from time import sleep
import threading
from random import randrange
from atexit import register
from Queue import Queue

def writeQ(queue):
    for i in range(100):
        tmp = queue.get(True)
        queue.put(tmp + 1, True)

def readQ(queue):
    for i in range(100):
        tmp = queue.get(True)
        queue.put(tmp + 1, True)

def main():
    q = Queue(32)
    q.put(0, True)
    threading.Thread(target=writeQ, args = (q,)).start()
    threading.Thread(target=readQ, args = (q,)).start()
    sleep(2)
    print q.get(True)

if __name__ == '__main__':
    main()

可以得出结论,Queue模块内部有同步机制,因此调用Queue的应用模块不需要担心并发的问题

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值