python3 线程间通信

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通信的例子:

code

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()

原文地址:https://www.cnblogs.com/sea-stream/p/14057770.html